我一直在用正则表达式获得一些乐趣,因为\ 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,
答案 0 :(得分:2)
[.-_]
匹配.
,/
,0
,1
,....,[
,\
, ]
,^
,_
(.
和_
之间的所有内容。)
因此,它匹配的内容超过\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.]+$/