为什么字符类和捕获组在javascript regexp中显示不同的结果,用于空白字符后跟一个点?

时间:2017-01-27 03:52:00

标签: javascript regex

我正在解决本书的章节练习 - 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/,但这个数字似乎也没关系!

我似乎错过了一些理解。

1 个答案:

答案 0 :(得分:0)

正当我完成这个问题发布时,我意识到我的错误导致错误输出。所以,我认为我宁愿在这里分享问题和答案,以便帮助将来可能面临类似问题的任何人。

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

但是当他们在捕获组中使用时,它们仍然保留了它们的特殊含义。

所以,代码

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

正在寻找模式 - 一个空格后跟一个不是换行符(因为句号)或任何逗号,冒号和分号的字符。

要获得正确的输出,正确的re(如果与捕获组一起使用)将是

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