对于以下正则表达式:
var regex = new RegExp("^(www\\.)?[0-9A-Za-z-\\.@:%_\+~#=]+(\\.[a-zA-Z]{2,})+(/.*)?(\\?.*)?");
我不明白为什么字符串 "www.goo gle.com"
通过正则表达式测试。当我这样做时:
var regex = new RegExp("^(www\\.)?[0-9A-Za-z-\\.@:%_\+~#=]+(\\.[a-zA-Z]{2,})+(/.*)?(\\?.*)?$");
即在正则表达式字符串末尾添加 $ 可以防止上述字符串传递,这正是我想要的。
我尝试在网上找到一个“模拟器”来帮助我弄清楚正则表达式是如何匹配的,但找不到太多帮助。
最佳答案
www.goo gle.com
通过了测试,因为 www.
与 [0-9A-Za-z-\\.@ 匹配: %_\+~#=]+
和
goo
与 (\.[a-zA-Z]{2,})+
匹配。相比之下,(www\\.)?
,最后两组是可选的,因此即使不匹配也满足正则表达式,因此不需要进一步匹配gle。 com
。
通过添加 $
,正则表达式不再匹配,因为空格不与任何子表达式匹配。
关于javascript - 正则表达式允许空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766912/