与文本匹配的Javascript正则表达式\\n
今天偶然发现这个小怪事,有人能解释一下吗与文本匹配的Javascript正则表达式\\n,javascript,regex,Javascript,Regex,今天偶然发现这个小怪事,有人能解释一下吗 x = 'a \\n b'; x.replace(/\\n/g, '<br>'); // => "a <br> b" x.replace(RegExp('\\n', 'g'), '<br>'); // => "a \\n b" x.replace(RegExp('\\n', 'gm'), '<br>'); // => "a <br> b" 我
x = 'a \\n b';
x.replace(/\\n/g, '<br>'); // => "a <br> b"
x.replace(RegExp('\\n', 'g'), '<br>'); // => "a \\n b"
x.replace(RegExp('\\n', 'gm'), '<br>'); // => "a <br> b"
我假设/\\n/g和RegExp'\\n',g'是等价的,但事实似乎并非如此。在什么情况下,使用一种方法会产生不同的结果
为什么只在使用RegExp对象时才需要多行标志
编辑:
第三次替换是我的斜视,即x.replaceRegExp'\\n',gm',;//=>a\\n b您需要使用RegExp构造函数进行双重转义,因为它是一个字符串,将被转换为正则表达式。您可以测试以下内容:
console.log(RegExp('\\n')); //=> /\n/
console.log(RegExp('\\\\n')); //=> /\\n/
这适用于任何特殊字符,因此\d是\\d、\b是\\b等。您需要使用RegExp构造函数进行双重转义,因为它是一个字符串,将转换为regex。您可以测试以下内容:
console.log(RegExp('\\n')); //=> /\n/
console.log(RegExp('\\\\n')); //=> /\\n/
这适用于任何特殊字符,因此\d是\\d、\b是\\b等
为什么只在使用RegExp对象时才需要多行标志
这根本不需要。当与regex literal和RegExp构造函数一起使用时,m修饰符的行为并没有区别。我不知道你的第三次替换是如何给你输出的:
x.replace(RegExp('\\n', 'gm'), '<br>'); // => "a <br> b"
然而,对于regex-literal,情况并非如此。你不需要任何额外的反斜杠。所以,现在第一和第二不应该给你相同的结果
为什么只在使用RegExp对象时才需要多行标志
这根本不需要。当与regex literal和RegExp构造函数一起使用时,m修饰符的行为并没有区别。我不知道你的第三次替换是如何给你输出的:
x.replace(RegExp('\\n', 'gm'), '<br>'); // => "a <br> b"
然而,对于regex-literal,情况并非如此。你不需要任何额外的反斜杠。所以,现在第1个和第2个不应该给你相同的结果。你是对的,替换没有给我那个输出。我显然就是看不懂控制台。完全忘记了双重逃跑,知道这很简单。谢谢你说得对,那个替代品没有给我那个输出。我显然就是看不懂控制台。完全忘记了双重逃跑,知道这很简单。谢谢