javascript 正则前瞻匹配如何理解?


前瞻匹配不好理解。具体的匹配过程是啥,请详解。

比如,如下的代码运行结果,我就想不通啊。


 var reg=/[a-z]+(?!coder).*/g;
'abcoder'.match(reg);//["abcoder"]
var reg=/(?!coder)/g;
'abcoder'.match(reg);//["", "", "", "", "", "", ""]
'quip'.match(/q(?=u)i/);//null,why?

正则表达式 JavaScript

山咲砂賀瑠 10 years, 4 months ago

'abcoder'.match(/[a-z]+(?!coder).*/g);
这句表示的是: [a-z]+ 匹配得到非 coder 结尾的最大的一个字符串,即 abcoder ,然后 .* 匹配后头剩余的内容。你可以测试下这个例子,对这个解答有帮助 '啦啦啦codeCODERcoder哈哈'.match(/[a-z]+(?!CODER).*/g)

'abcoder'.match(/(?!coder)/g);
零宽断言表示的只是匹配的位置,由于你没有在前面用字符提出匹配内容,所以匹配的所有结果都为空,但是因为 g 的原因会匹配7次(字符串的长度),所以会有7个空字符串。

'quip'.match(/q(?=u)i/);
这句表示的是:匹配 u 前面的 q ,同时这个 q 随后应该是一个 i 。很明显没有这种情况的字符串,当然是 null 咯。

斌斌吃辣吃到爽 answered 10 years, 4 months ago

Your Answer