我正在解决本书的章节练习 - http://eloquentjavascript.net/09_regexp.html
有一个问题,我需要为空格字符后跟点,逗号,冒号或分号编写正则表达式。
我写了这个
var re1 = /\s(.|,|:|;)/;
这本书有这个答案
var re2 = /\s[.,;:]/;
据我所知,第二个是正确的,效率更高。但是留下效率,第一个也应该给出正确的结果。
第一个没有为以下代码提供正确的输出 -
console.log(re1.test("escape the dot")); // prints true
它应该给出“假”,但输出相反。我无法理解这一点。我也试过了https://www.debuggex.com/,但这个数字似乎也没关系!
我似乎错过了一些理解。
答案 0 :(得分:0)
正当我完成这个问题发布时,我意识到我的错误导致错误输出。所以,我认为我宁愿在这里分享问题和答案,以便帮助将来可能面临类似问题的任何人。
事物是句点(点)本身,当在方括号之间使用时,失去其特殊含义。其他特殊字符也是如此,例如+。
但是当他们在捕获组中使用时,它们仍然保留了它们的特殊含义。
所以,代码
var re1 = /\s(.|,|:|;)/;
console.log(re1.test("escape the dot")); // prints true
正在寻找模式 - 一个空格后跟一个不是换行符(因为句号)或任何逗号,冒号和分号的字符。
要获得正确的输出,正确的re(如果与捕获组一起使用)将是
var re1 = /\s(\.|,|:|;)/;