[英]RegExp capturing group in capturing group
我想捕获“ http://test.com/1/2 ”中的“ 1”和“ 2”。 这是我的正则表达式/(?:\\/([0-9]+))/g
。 问题是我只得到["/1", "/2"]
。 根据http://regex101.com/r/uC2bW5,我必须获取“ 1”和“ 1”。
我正在JS中运行RegExp。
您有两种选择:
在RegExp.prototype.exec
使用while
循环:
var regex = /(?:\\/([0-9]+))/g, string = "http://test.com/1/2", matches = []; while (match = regex.exec(string)) { matches.push(match[1]); }
根据elclanrs的建议使用replace
:
var regex = /(?:\\/([0-9]+))/g, string = "http://test.com/1/2", matches = []; string.replace(regex, function() { matches.push(arguments[1]); });
在Javascript中,您的“匹配”始终具有索引为0
的元素,其中包含整个模式匹配。 因此,在您的情况下,第二个匹配的索引0为/1
和/2
。
如果要获得定义的第一个匹配组(不包含/
的匹配组),则可以在索引为1
的匹配数组项中找到它。
不能删除该索引0
,它与使用?:
定义为non-matching
的外部匹配组无关?:
想象一下Javascript将您的整个正则表达式包装在另外一组括号中。
即字符串Hello World
和Regex /Hell(o) World/
将导致:
[0 => Hello World, 1 => o]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.