Javascript JS中的正则表达式:\\。不匹配\n
我得到一个包含换行符(/n)、制表符(/t)和小写字母[a-z]的字符串。通过匹配Javascript JS中的正则表达式:\\。不匹配\n,javascript,regex,Javascript,Regex,我得到一个包含换行符(/n)、制表符(/t)和小写字母[a-z]的字符串。通过匹配/\n |\t/可以做到这一点。点代表通配符 因此我想知道,为什么/\n\t/与/\\./不匹配 var text = 'test1 \ntest2'; text.split(/\n/) //['test1', 'test2'] text.split(/\./) //['test1 \ntest2'] text.split(/\\./) //['test1 \ntest2'] \.不应该与
/\n |\t/
可以做到这一点。点代表通配符
因此我想知道,为什么/\n\t/
与/\\./
不匹配
var text = 'test1 \ntest2';
text.split(/\n/) //['test1', 'test2']
text.split(/\./) //['test1 \ntest2']
text.split(/\\./) //['test1 \ntest2']
\.
不应该与\n
(换行符)匹配吗?\n
的计算结果为新行,因此实际上是与空字符串匹配。如果您快速执行console.log('\n')代码>您可以看到它的输出。让我尝试回答所有问题:
点代表通配符
不,在正则表达式中,我们不使用术语“通配符”。这是一个好主意。JavaScript正则表达式中的点匹配除换行符以外的任何字符
我在想,为什么/\n\t/
与/\\./
不匹配
var text = 'test1 \ntest2';
text.split(/\n/) //['test1', 'test2']
text.split(/\./) //['test1 \ntest2']
text.split(/\\./) //['test1 \ntest2']
因为/\n |\t/
匹配一个符号(换行符或制表符),而正则表达式/\\./
匹配一个文本\
和一个字符(而不是换行符)
\n
和\t
是转义序列。这意味着\
不是一个文字反斜杠,它与下面的符号一起构成一个代码单元,一个不能以其他方式写入的字符串。事实上,我们怎么能用笔在纸上写一个换行符呢?不可能
了解更多关于
现在,
text.split(/\n/)/['test1','test2']
如果输入字符串包含换行符,则结果数组中有两个元素
text.split(/\./)/['test1\ntest2']
找不到匹配项,因为\。
与文字点匹配。正则表达式中转义的点(前面有一个literal\
)不再是特殊的正则表达式元字符,并且只匹配其literal表示形式。您的字符串没有点,因此没有匹配项
text.split(/\\./)/['test1\ntest2']
同样,找不到匹配项,因为/\\./
查找后跟除换行符以外的任何字符的文本\
提示:在中使用您的表达式,它将告诉您右侧的正则表达式可以匹配什么
在这里,使用regex,您有一个文字符号(/…/
)。在文字表示法中,\
被视为文字,因此,您不必两次转义它。如果使用构造函数表示法(即,RegExp(…)
),则必须使用双转义。例如
var re = /\\./; // is equal to
var re = new RegExp("\\\\.");
有关构造函数和文字符号的更多信息,请参见。为什么它不应返回null\n
是单个字符,而不是后跟n
/\\\./
与后跟非换行符的反斜杠匹配/\./
匹配文本
@Moezalez为什么要匹配?您的输入字符串不包含反斜杠。@Moezalz在这种情况下,字符串和正则表达式各包含一个字符(换行符)。我不明白你的问题从何而来。@Moezalz你似乎不明白\n
是表示单个字符的JavaScript语法。它在运行时不会存储为反斜杠-n。您可以编写与\x0a
或\u000a
相同的字符。