>假设我有这个:
console.log(new RegExp('.git'));
console.log(new RegExp('scripts/npm'));
结果是:
/.git/
/scripts/npm/
我的问题是 - 为什么它转义了脚本/npm 中的斜杠,但它没有转义 .git 中的 .这有什么韵律和原因?
请注意,在这种情况下,正则表达式字符串是从命令行传递的,因此我需要使用 RegEx 将它们转换为正则表达式。
未转义的/
表示正则表达式的开始和结束。当您将包含/
的字符串传入构造函数时,该/
当然是正则表达式的一部分,而不是表示开始或结束的符号。
.
完全是另一回事,没有任何 RE 分隔符,因此它保持原样。
请注意,如果您希望正则表达式匹配文字点(而不是任何字符(,则需要在使用构造函数时对其进行双重转义:
console.log(new RegExp('\.git'));
当你用JS编写正则表达式时,你可以使用两个/
初始化正则表达式字符串。这称为正则表达式文本初始化。更多关于它的信息 这里.
例如
let re = /(w+)s(w+)/;
现在,对于为什么它在/
之前附加的问题,这仅仅是由于
RegExp
处理传递的字符串文字的方式。这可以防止传递的字符串损坏,确保所有传递的字符都得到考虑。 此外,如果您检查RegExp
返回的对象,我们可以看到实际的 source 属性设置为scripts\/npm
。因此,第一个表示第二个
的字面意义。而从正则表达式的角度来看
,它只是转义了进行
/
,形成正则表达式文字符号。