Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与文本匹配的Javascript正则表达式\\n_Javascript_Regex - Fatal编程技术网

与文本匹配的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个不应该给你相同的结果。

你是对的,替换没有给我那个输出。我显然就是看不懂控制台。完全忘记了双重逃跑,知道这很简单。谢谢你说得对,那个替代品没有给我那个输出。我显然就是看不懂控制台。完全忘记了双重逃跑,知道这很简单。谢谢