我想抓住" 1"和" 2"在" http://test.com/1/2"。这是我的正则表达式/(?:\/([0-9]+))/g
。
问题是我只得到["/1", "/2"]
。根据{{3}},我必须得到" 1"和" 1"。
我在JS中运行我的RegExp。
答案 0 :(得分:1)
您有几个选择:
在while
上使用RegExp.prototype.exec
循环:
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]);
});
答案 1 :(得分:0)
在Javascript中,您的“匹配”始终是索引为0
的元素,其中包含WHOLE模式匹配。因此,在您的情况下,第二个匹配的索引0为/1
和/2
。
如果你想得到你的DEFINED第一个Matchgroup(不包括/
的那个),你会在带有索引1
的Match-Array Entry中找到它。
无法删除此索引0
,并且使用non-matching
?:
的外部匹配组无关
想象一下,Javascript将你的整个正则表达式包含在另外一组括号中。
即。字符串Hello World
和正则表达式/Hell(o) World/
将导致:
[0 => Hello World, 1 => o]