gpt4 book ai didi

javascript - 正则表达式 : Get the matched value of each match in a Kleene-star expression?

转载 作者:行者123 更新时间:2023-11-29 18:27:52 26 4
gpt4 key购买 nike

特别是,这可以用 Javascript 实现吗?

>> "Version 1.2.3.4".match(/\S+ (\d+)(\.\d+)*/)
["Version 1.2.3.4", "1", ".4"]

很明显 $2 被设置为最后一个 Kleene-“匹配”。是否没有内置方法来检索其余部分(".2"".3")?

如果这在 JS 中不能轻易完成,Perl 能做到吗?

更新:到目前为止,许多答案都是“解决方法”,由于我的示例很简单,所以这些方法可以奏效。如果我想要匹配的重复部分不仅仅是一个数字,它们将无法工作。

但是,确实存在一个非常有效的解决方案:使用 /expr/g 全局正则表达式匹配:只需过滤掉重复的部分并使用它。我发现这不如更普遍适用的 * 运算符灵活,但在大多数情况下它显然可以完成工作。

最佳答案

JavaScript 中的正则表达式,与大多数其他正则表达式风格一样,如果重复匹配,只会捕获捕获组的最后一个值。唯一众所周知的正则表达式库(据我所知)是 .NET 中的那个,您可以在其中访问所有先前匹配的捕获。

所以不,你不能在 JS 中这样做。

在 Perl 中有几种方法可以完成这些事情。一种更优雅的方法可能是使用 \G(它也适用于 PCRE)。

例如:

"Version 1.2.3.4" =~ /(?:\S+ |\G(?!^)\.)(\d+)/g

返回(在列表上下文中):

(1, 2, 3, 4)

关于javascript - 正则表达式 : Get the matched value of each match in a Kleene-star expression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251465/

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