繁体   English   中英

为什么字符类和捕获组在javascript正则表达式中对于空格字符后跟点会显示不同的结果?

[英]Why character class and capturing group show different results in javascript regexp for a whitespace character followed by a dot?

我正在解决本书中的章节练习-http://eloquentjavascript.net/09_regexp.html

有一个问题,我需要为空格字符编写正则表达式,后跟点,逗号,冒号或分号。

我写了这个

var re1 = /\s(.|,|:|;)/;

这本书有答案

var re2 = /\s[.,;:]/;

我知道第二个是正确的,而且效率更高。 但是不考虑效率,第一个也应该给出正确的结果。

对于下面的代码,第一个没有给出正确的输出-

console.log(re1.test("escape the dot"));  // prints true

它应该给出“ false”,但输出相反。 我听不懂 我也尝试过https://www.debuggex.com/ ,但这个数字似乎还可以!

看来我末日缺少一些了解。

当我完成要发布的问题时,我意识到我的错误给了我错误的输出。 因此,我认为我宁愿在这里分享问题和答案,以帮助将来可能会遇到类似问题的任何人。

问题是句点(点)本身在方括号之间使用时会失去其特殊含义。 其他特殊字符(例如+)也是如此。

但是在捕获组中使用时,它们保留了其特殊含义。

所以,代码

var re1 = /\s(.|,|:|;)/;
console.log(re1.test("escape the dot"));  // prints true

而是在寻找模式-一个空格,后跟一个不是换行符的字符(由于period),或者逗号,冒号和分号中的任何一个。

为了获得正确的输出,如果与捕获组一起使用,则正确的re将是:

var re1 = /\s(\.|,|:|;)/;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM