JavaScript中\w*无法匹配单词字符:为何/\w*/匹配结果为空?
为什么/\w*/匹配"/assedede"返回空字符串?
这其实是正则里*和+量词的核心区别导致的,咱们一步步拆解:
先搞懂两个量词的差异
\w*:表示匹配0个或任意多个单词字符(单词字符包括a-z、A-Z、0-9和下划线_)——划重点,它允许匹配「0个字符」这种情况\w+:表示匹配1个或更多个单词字符——它要求至少匹配1个符合条件的字符,不能是空的
看看两种正则的匹配过程
1. 用/\w*/匹配"/assedede"
正则引擎是从字符串的第一个字符开始逐个检查的:
- 第一个字符是
/,它不属于\w的范畴; - 但
\w*允许匹配0个字符啊!所以引擎直接在这里就匹配到了「0个字符」,也就是空字符串"",然后就停止匹配了(match方法默认找到第一个匹配结果就返回)。
2. 用/\w+/匹配"/assedede"
同样从第一个字符开始:
- 第一个字符
/不符合\w,引擎不会停,会跳过它继续往后找; - 找到第二个字符
a,这是单词字符,于是引擎开始持续匹配后面的s、s、e、d、e、d、e,直到字符串结束,最终返回完整的"assedede"。
额外小提示
如果你想用\w*也能匹配到后面的单词字符,可以调整正则的匹配位置,比如用/\w*$/(匹配字符串末尾的0或多个单词字符),这时候"/assedede".match(/\w*$/)就会返回"assedede"啦。
内容的提问来源于stack exchange,提问作者Evergreen
相关产品推荐
相关产品推荐

