正则表达式构造函数转义斜杠字符,但不转义点



>假设我有这个:

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。因此,第一个表示第二个的字面意义。而从正则表达式的角度来看,它只是转义了进行/,形成正则表达式文字符号。

最新更新