[英]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.