JS中的正则表达式:\\。不匹配\ n

时间:2015-09-14 20:07:20

标签: javascript regex

我收到一个包含换行符(/ n),制表符(/ t)和小写字母[a-z]的字符串。可以通过匹配/\n|\t/来实现。 AFAIK点代表通配符。

因此我想知道为什么/\n|\t//\\./

相同的内容不匹配
var text = 'test1 \ntest2';

text.split(/\n/)     //['test1', 'test2']
text.split(/\./)     //['test1 \ntest2']
text.split(/\\./)    //['test1 \ntest2']

\\.是否应该与\n(换行符)匹配?

2 个答案:

答案 0 :(得分:3)

让我试着回答所有问题:

  

AFAIK点代表通配符。

不,在正则表达式中,我们不使用术语"通配符"。这是一个special regex (meta)character。 JavaScript正则表达式中的一个点匹配任何字符,但是换行符。

  

我很想知道为什么/\n|\t//\\./

相同的内容不匹配

因为/\n|\t/匹配1个符号(换行符或制表符),而正则表达式/\\./匹配文字\和换行符以外的字符。

\n\t转义序列。这意味着\不是一个字面反斜杠,它与下面的符号一起形成一个代码单元,一个不能以其他方式写入的字符串。实际上,我们如何用笔在纸上写下换行符?没办法!

详细了解JavaScript character escape sequences here

现在,

  

text.split(/\n/) //['test1', 'test2']

是的,您的输入字符串包含换行符,因此,您在结果数组中得到两个元素

  

text.split(/\./) //['test1 \ntest2']

找不到匹配项,因为\.与文字点匹配。在正则表达式中转义的点(在它之前有文字\)停止是一个特殊的正则表达式元字符,并且只匹配其文字表示。你的字符串没有点,因此没有匹配。

  

text.split(/\\./) //['test1 \ntest2']

同样,找不到匹配项,因为/\\./会查找文字\,后跟任何字符,但换行符。

提示:在regex101.com使用您的表达式,它会告诉您正则表达式在右侧可以匹配的内容。

在这里,使用正则表达式,您有一个文字符号(/.../)。在字面符号中,\被认为是文字,因此,您不必两次逃避它。如果您使用构造函数表示法(即RegExp(....)),则必须使用双重转义。 E.g。

var re = /\\./; // is equal to
var re = new RegExp("\\\\.");

MDN RegExp help page查看有关构造函数和文字符号的更多信息。

答案 1 :(得分:0)

\n被评估为一个新行,所以你基本上匹配一个空字符串。如果你快速console.log('\n');,你可以看到它的输出。

相关问题