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

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)和小写字母[a-z]的字符串。通过匹配
/\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
相同的字符。