Javascript RegExp构造函数转义斜杠字符,但不转义点

Javascript RegExp构造函数转义斜杠字符,但不转义点,javascript,node.js,regex,Javascript,Node.js,Regex,假设我有这个: console.log(new RegExp('.git')); console.log(new RegExp('scripts/npm')); 结果是: /.git/ /scripts\/npm/ 我的问题是-为什么它在scripts/npm中逃过斜杠,但它没有逃过斜杠。在,吉特?什么是押韵和理由 注意,在本例中,正则表达式字符串是从命令行传递的,因此我需要使用RegExp将它们转换为正则表达式。在JS中编写正则表达式时,可以使用两个/来初始化正则表达式字符串。这称为正则表

假设我有这个:

console.log(new RegExp('.git'));
console.log(new RegExp('scripts/npm'));
结果是:

/.git/
/scripts\/npm/
我的问题是-为什么它在scripts/npm中逃过斜杠,但它没有逃过斜杠。在,吉特?什么是押韵和理由


注意,在本例中,正则表达式字符串是从命令行传递的,因此我需要使用RegExp将它们转换为正则表达式。

在JS中编写正则表达式时,可以使用两个/来初始化正则表达式字符串。这称为正则表达式文字初始化。更多关于它

比如说

let re = /(\w+)\s(\w+)/;
现在,关于为什么要追加\ before/,这仅仅是因为RegExp处理传递的字符串文本的方式。这可以防止传递的字符串损坏,确保所有传递的字符都已记帐。
此外,如果您检查RegExp返回的对象,我们可以看到实际的源属性被设置为scripts\\/npm。因此,第一个\表示第二个\的字面意义。虽然从正则表达式的角度来看,它只是跳过了进行中的/以形成正则表达式文字符号。

当您在JS中编写正则表达式时,您可以使用两个/来初始化正则表达式字符串。这称为正则表达式文字初始化。更多关于它

比如说

let re = /(\w+)\s(\w+)/;
现在,关于为什么要追加\ before/,这仅仅是因为RegExp处理传递的字符串文本的方式。这可以防止传递的字符串损坏,确保所有传递的字符都已记帐。 此外,如果您检查RegExp返回的对象,我们可以看到实际的源属性被设置为scripts\\/npm。因此,第一个\表示第二个\的字面意义。从正则表达式的角度来看,它只是逃避了进行/形成正则表达式文字符号。

未转义/表示正则表达式的开始和结束。当您将包含/的字符串传入构造函数时,当然,该/是正则表达式的一部分,而不是表示开始或结束的符号

这个。是完全其他的东西,没有任何东西可以重新定义分隔符,所以它保持原样

请注意,如果希望正则表达式匹配文字点而不是任何字符,则在使用构造函数时需要双重转义:

console.log(new RegExp('\\.git'));
unscaped/表示正则表达式的开始和结束。当您将包含/的字符串传入构造函数时,当然,该/是正则表达式的一部分,而不是表示开始或结束的符号

这个。是完全其他的东西,没有任何东西可以重新定义分隔符,所以它保持原样

请注意,如果希望正则表达式匹配文字点而不是任何字符,则在使用构造函数时需要双重转义:

console.log(new RegExp('\\.git'));

我认为它将文本视为最终的regex.right,因此可能/在RegExp中不是一个特殊字符,但是。是一个特殊字符吗?js中的regex是介于两个字符之间的字符串/我认为它将文本视为最终的regex.right,因此也许/在RegExp中不是一个特殊字符,但是。是特殊字符吗?js中的regex是介于两个字符之间的字符串/Note,在本例中,regex字符串是从命令行传递的,因此我需要使用RegExp将它们从字符串转换为regex。我更新了OP以反映此要求。@OlegzandrDenman理解,您得到的输出只是文字版本。我假设,RegExp只是简单地用``包装任何特殊字符,以确保输入与最初输入的内容保持一致。注意,在本例中,regex字符串是从命令行传递的,因此我需要使用RegExp将它们从字符串转换为regex。我更新了OP以反映此要求。@OlegzandrDenman理解,您得到的输出只是文字版本。我假设,RegExp只是简单地用``包装任何特殊字符,以确保输入与最初输入的内容保持一致。转化为正义。这表示正则表达式的任何字符。写作\\。结果是一个字符串包含一个反斜杠,因此正则表达式模式现在包含\。或者只匹配一个点。如果使用文本regex构造函数,则/\./相当于新的RegExp\\.-前者不是字符串,因此不需要像后一种方法那样转义反斜杠。为了澄清双转义,您需要双转义,因为您传递的是字符串,当您传递字符串时,a\。转化为正义。这表示正则表达式的任何字符。写作\\。结果是一个字符串包含一个反斜杠,因此正则表达式模式现在包含\。或者只匹配一个点。如果使用文本regex构造函数,则/\./相当于新的RegExp\\.-前者不是字符串,因此不需要像后一种方法那样转义反斜杠。