当前位置:  开发笔记 > 编程语言 > 正文

零长度正则表达式和无限匹配?

如何解决《零长度正则表达式和无限匹配?》经验,为你挑选了1个好方法。

在试图详细说明这个问题的答案时,我现在试图接受零长度正则表达式的行为/含义.

我经常使用www.regexr.com作为游乐场来测试/调试/理解正则表达式中发生的事情.

所以我们有这个最平庸的场景:

正则表达式是 a*

输入字符串是dgwawa (事实上​​,这里的字符串是无关紧要的)

为什么报告此正则表达式将无限匹配的行为,因为它匹配前一个字符的零次出现?

为什么结果不能是6个匹配,每个字符位置一个(因为在每个字符,无论是否是a,都有匹配,因为零匹配是匹配的)?

它是如何进入无限匹配的?所以它不会一次检查/进行一个角色?

我想知道它是如何/在何处进入无限循环.

在此输入图像描述



1> Wiktor Strib..:

regexr.com在线正则表达式测试程序专为JavaScript正则表达式测试而设计.当可以匹配空字符串的模式传递时,JavaScript正则表达式引擎不会自动移动索引.

这就是为什么当您需要模拟在.NET Regex.Matches,PHP preg_match_all,Python re.finditer等中观察到的行为时,您需要手动推进索引以测试每个位置.

请参阅regex101.com测试:

var re = /a*/g; 
var str = 'dgwawa';
var m;
 
while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {   // <- this part
        re.lastIndex++;               // <- here
    }                                 // <- is important
    document.body.innerHTML += "'" + m[0] + "'
"; }
推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有