首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式:获取Kleene-star表达式中每个匹配的匹配值?

正则表达式:获取Kleene-star表达式中每个匹配的匹配值?
EN

Stack Overflow用户
提问于 2012-06-29 03:20:58
回答 4查看 556关注 0票数 2

特别是,使用Javascript可以做到这一点吗?

代码语言: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全局正则表达式匹配:只需过滤出重复的部分并使用它。我发现这比更普遍适用的*操作符更不灵活,但在大多数情况下它显然可以完成这项工作。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-29 06:40:28

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

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

在Perl中,有几种方法可以完成这些任务。一种更优雅的方法可能是使用\G (它也可以在PCRE中工作)。

例如:

代码语言:javascript
复制
"Version 1.2.3.4" =~ /(?:\S+ |\G(?!^)\.)(\d+)/g

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

代码语言:javascript
复制
(1, 2, 3, 4)
票数 3
EN

Stack Overflow用户

发布于 2012-06-29 03:30:04

为什么不匹配整个版本字符串,然后按.拆分

代码语言:javascript
复制
>> "Version 1.2.3.4".match(/\S+ (\d+(?:\.\d+)*)/)[1].split('.')
票数 1
EN

Stack Overflow用户

发布于 2012-06-29 03:23:37

正则表达式\.?\d+将返回您需要的内容,但您必须为所有匹配运行此正则表达式,而不仅仅是一个...

代码语言:javascript
复制
var n=str.match(/\.?\d+/g); 

如果你只想匹配没有前导点的数字,那么使用正则表达式\d+

代码语言:javascript
复制
var n=str.match(/\d+/g); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11251465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档