gpt4 book ai didi

javascript - javascript kleene star 如何与分组交互?

转载 作者:行者123 更新时间:2023-11-30 12:42:44 25 4
gpt4 key购买 nike

这看起来很简单,也许我遗漏了一些明显的东西。我想返回具有模式 (.*) 的字符串中的所有可变长度子字符串。不过,我发现我在 Firefox 控制台中出现了非常奇怪的行为:

"666677888".match(/.*(7{1}).*/)[1];
> "7"
"666677888".match(/.*(7{2}).*/)[1];
> "77"

到目前为止一切顺利。然后:

"666677888".match(/.*(7*).*/)[1];
> ""
"666677888".match(/.*(7{0,2}).*/)[1];
> ""
"666677888".match(/.*(7{0,}).*/)[1];
> ""

这似乎表明 7 匹配 {1} 次和 {2} 次,但不是 {0,} 次或{0,2} 次。我在这里缺少什么?

最佳答案

正则表达式的第一部分是贪心的,所以它会回溯寻找第二部分的匹配项。

对于模式 .*(7{1}).*,第一个 .* 将从匹配整个字符串开始,然后它必须将其缩小一个一个字符,直到找到第二个 7 以匹配 7{1}

对于模式 .*(7{0,2}).* 第一个 .* 将匹配整个字符串,然后它不必做更多的事情,因为 7{0,2} 和第二个 .* 都在字符串末尾填充了空字符串。

要使表达式匹配 7{0,2} 你必须强制它匹配所有的 7 通过匹配它后面的东西,例如一个字符那不是 7,并且还强制它匹配某些内容,例如通过包含字符串的末尾。模式 .*?(7{0,2})[^7]*$ 将匹配 77

关于javascript - javascript kleene star 如何与分组交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com