w字正则表达头痛

时间:2015-02-08 08:59:59

标签: regex

我一直在用正则表达式获得一些乐趣,因为\ w表达式对我不起作用。当我使用它时:

/^[a-zA-Z0-9.]*@[a-zA-Z0-9.-_]*[\.][a-zA-Z0-9.]*$/.test(x);

一切都在起作用,但是当我使用它时:

/^[a-zA-Z0-9.]*@\w*[\.][a-zA-Z0-9.]*$/.test(x);

或者这个:

/^[a-zA-Z0-9.]*@\w+[\.][a-zA-Z0-9.]*$/.test(x);

没有骰子。

在表达式中的任何地方提及\ w,无论模式匹配,我都会得到错误的返回。例如。 / ^ \ W + @ \ W + $ /

我可以使用方括号和a-z等来解决问题,但我很想知道这里发生了什么,以便将来参考和个人理智。

THX,

2 个答案:

答案 0 :(得分:2)

[.-_]匹配./01,....,[\]^_._之间的所有内容。)

因此,它匹配的内容超过\w匹配的内容。

答案 1 :(得分:1)

您的子模式:

[a-zA-Z0-9.-_]

不仅有缺陷(由于中间未转义的连字符),它不等同于\w,它与[a-zA-Z0-9_]

相同

而不是\w使用:

[\w.-]

而不是[a-zA-Z0-9.-_]

字符类中间的未转义 -充当范围而不是字面连字符。

完整正则表达式:

/^[a-zA-Z0-9.]+@[\w.-]+[\.][a-zA-Z0-9.]+$/