我收到一个包含换行符 (/n)、制表符 (/t) 和小写字母 [az] 的字符串。可以通过匹配来做到这一点/\n|\t/。AFAIK 点代表通配符。
因此我想知道为什么/\n|\t/不匹配相同的东西/\\./
var text = 'test1 \ntest2';
text.split(/\n/) //['test1', 'test2']
text.split(/\./) //['test1 \ntest2']
text.split(/\\./) //['test1 \ntest2']
Run Code Online (Sandbox Code Playgroud)
不应该\\.匹配\n(换行符)吗?
让我尝试回答所有要点:
AFAIK 点代表通配符。
不,在正则表达式中,我们不使用术语“通配符”。它是一个特殊的正则表达式(元)字符。JavaScript 正则表达式中的点匹配除换行符之外的任何字符。
我想知道为什么
/\n|\t/不匹配相同的东西/\\./
因为/\n|\t/匹配 1 个符号(换行符或制表符),而正则表达式/\\./匹配文字\和换行符以外的字符。
和\n是转义\t序列。这意味着不是一个文字反斜杠,它与后面的符号一起形成一个代码单元,一个不能以其他方式编写的字符串。确实,我们怎样才能用笔在纸上写出换行符呢?决不!\
请在此处查看有关JavaScript 字符转义序列的更多信息。
现在,
text.split(/\n/) //['test1', 'test2']
确实,您的输入字符串包含换行符,因此,您在结果数组中得到两个元素
text.split(/\./) //['test1 \ntest2']
未找到匹配项,因为\.与文字点匹配。正则表达式中转义的点(\前面有文字)不再是特殊的正则表达式元字符,而只是匹配其文字表示。您的字符串没有点,因此没有匹配项。
text.split(/\\./) //['test1 \ntest2']
同样,没有找到匹配项,因为它/\\./会查找\后跟除换行符之外的任何字符的文字。
提示:使用您在regex101.com上的表达式,它会告诉您您的正则表达式可以在右侧匹配什么。
在这里,使用正则表达式,您有一个文字符号 ( /.../)。在字面表示法中,\被视为字面量,因此,您不必将其转义两次。如果您使用构造函数符号(即RegExp(....)),则必须使用双重转义。例如
var re = /\\./; // is equal to
var re = new RegExp("\\\\.");
Run Code Online (Sandbox Code Playgroud)
有关构造函数和文字符号的更多信息,请参阅MDNRegExp帮助页面。
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |