RegEx捕获组中的捕获组

时间:2014-06-04 21:56:50

标签: javascript regex

我想抓住" 1"和" 2"在" http://test.com/1/2"。这是我的正则表达式/(?:\/([0-9]+))/g。 问题是我只得到["/1", "/2"]。根据{{​​3}},我必须得到" 1"和" 1"。

我在JS中运行我的RegExp。

2 个答案:

答案 0 :(得分:1)

您有几个选择:

  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]);
    }
    
  2. 根据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]