【发布时间】:2014-08-11 12:14:10
【问题描述】:
我正在尝试解析以下字符串格式:
<id>:<name>[,<name>]*
例如,考虑123:test,south-west,best,rest_well。
我写了以下正则表达式:
/(\d+):([a-zA-Z0-9_\-]+)(?:,([a-zA-Z0-9_\-]+))*/
我的假设是(?:,([a-zA-Z0-9_\-]+)) 将捕获可选的附加名称(south-west、best 和 rest_well)。但是,它只捕获姓氏“rest_well”。
打印出来的匹配:
'123:test,south-west,best,rest_well'.match(/(\d+):([a-zA-Z0-9_\-]+)(?:,([a-zA-Z0-9_\-]+))*/);
> ["123:test,south-west,best,rest_well", "123", "test", "rest_well"]
我所期待的:
> ["123:test,south-west,best,rest_well", "123", "test", "south-west", "best", "rest_well"]
我相信其他语言实际上会积累匹配的组,但不知何故这失败了。也许我错过了一个小细节。任何帮助表示赞赏!
【问题讨论】:
-
是的,看起来是这样。太糟糕了,但我可以用不同的方式来写。只是希望有一个漂亮的解决方案;)
-
简单的解决方案是在分隔符上拆分。见yate's answer。
标签: javascript regex regex-group