JavaScript替换反斜杠报Unterminated string constant错误解决方案
报错原因
在JavaScript字符串字面量中,\是转义字符,你写的"\\\"实际解析逻辑是:
- 第一个
\转义第二个\,得到1个字面量的反斜杠 - 第三个
\会转义紧随其后的闭合双引号",导致双引号失去字符串边界的作用,编译器判定字符串没有正常闭合,因此抛出Unterminated string constant错误。
正确写法
你需要将报错的那行替换为:
.replace(/\\/g, "\\\\")
原理说明
你当前的逻辑是把原文本中的特殊字符转义为正则表达式可用的字面量字符,对反斜杠来说:
- 正则表达式要匹配1个字面量反斜杠,需要写2个连续的反斜杠
\\做转义 - 在JavaScript字符串字面量中,要表示1个实际的反斜杠,需要写2个连续的
\转义,所以要得到2个实际的反斜杠,就需要在字符串里写4个\,也就是"\\\\",解析后实际值就是\\,刚好符合正则的转义要求。
修正后完整代码
function matchLiteral(_ctx: InternalContext, descriptor: TokenDescriptor) { const phrasePattern = descriptor.item === ItemKey.MessageFieldValue ? "\\S+" : descriptor.phrase .replace(/\?/g, "\\?") // <- Good .replace(/\./g, "\\.") // <- Good .replace(/\//g, "\\/") // <- Good .replace(/\\/g, "\\\\") // <- Fixed .replace(/\(/g, "\\(") // <- Good .replace(/\)/g, "\\)") // <- Good .toLowerCase() .split(/\s/) .join("\\s"); const pattern = new RegExp(`^${phrasePattern}(?=\\s|$)`); }
内容的提问来源于stack exchange,提问作者personalt
相关产品推荐
相关产品推荐

