SyntaxError: 模式末尾出现反斜杠

当正则表达式模式以未转义的反斜杠 (\) 结尾时,就会出现 JavaScript 异常“\ at end of pattern”。在正则表达式字面量中,反斜杠会使结束斜杠 / 成为字面字符,因此这只能在使用 RegExp() 构造函数时出现。

消息

SyntaxError: Invalid regular expression: /\/: \ at end of pattern (V8-based)
SyntaxError: \ at end of pattern (Firefox)
SyntaxError: Invalid regular expression: \ at end of pattern (Safari)

错误类型

出了什么问题?

反斜杠不能在正则表达式中直接出现。它要么在另一个字符前面对其进行 转义,要么被另一个反斜杠转义。正则表达式模式末尾的反斜杠无效,因为它没有转义任何内容。

示例

双重转义反斜杠

此错误仅在使用 RegExp() 构造函数时才会发生。考虑以下代码,它旨在匹配单个反斜杠字符

js
const pattern = new RegExp("\\");

在 JavaScript 字符串中,反斜杠也是转义序列。因此,字符串字面量 "\\" 中的两个反斜杠被解释为一个反斜杠。然后,RegExp() 构造函数在正则表达式源中只看到一个反斜杠字符。要解决此问题,您需要对反斜杠进行双重转义

js
const pattern = new RegExp("\\\\");

字符串字面量中的四个反斜杠表示正则表达式源中的两个反斜杠,然后变为单个反斜杠字面字符的 字符转义

另请参阅