正则表达式匹配中间的数字

时间:2014-12-31 22:48:56

标签: javascript regex

以下字符串表示viewmodel属性,在这种情况下,它有3个不同的索引:

PROGRAMA_FASES [ 1 ]。PROGRAMA_FASE_REPLICAS [ 0 ]。PROGRAMA_FASES.PROGRAMA_PREGUNTAS [ 2 ]。值

我正在使用这些函数来增加第一个索引或最后一个索引。

function increment_last(v) {
    return v.replace(/[0-9]+(?!.*[0-9])/, function (match) {
        return parseInt(match, 10) + 1;
    });
}

function increment_first(v) {
    return v.replace(/(\d+)/, function (match) {
        return parseInt(match, 10) + 1;
    });
}

...正如你可以看到我在使用正则表达式之前匹配数字。

你能帮我一个只匹配中间索引的正则表达式吗?在这种情况下,它将是“0”。

非常感谢

3 个答案:

答案 0 :(得分:2)

如果模式一致(TEXT[NUMBER].TEXT[NUMBER].TEXT[NUMBER]),您可以匹配所有匹配项,然后选择第二个匹配项。一个简单的例子(假设上面的TEXT总是字符串字符,从不包含数字)将是:

var number = "PATTERN[0].TO[1].MATCH[2]".match(/\d/g)[1];

如果您希望数字混合在一起并且只想匹配括号中的数字,则可以更新/\[\d\]/g之类的正则表达式,然后从匹配的括号中选择数字。

答案 1 :(得分:2)

以下正则表达式将捕获所有三个值。

.*\[(\d*)*\].*\[(\d*)*\].*\[(\d*)*\].*

您可以在以下示例中访问它们

var myString = "PROGRAMA_FASES[1].PROGRAMA_FASE_REPLICAS[0].PROGRAMA_FASES.PROGRAMA_PREGUNTAS[2].Value";
var myRegexp = /.*\[(\d*)*\].*\[(\d*)*\].*\[(\d*)*\].*/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // Will output 1

答案 2 :(得分:0)

感谢你们的答案,这些答案给了我更好的方法和另一种思考解决方案的方法。

最后我找到了这个答案https://stackoverflow.com/a/7958627/1532797,它给出了一个很好的解决方案,可以用于许多其他目的。

在我的情况下,我可以简单地增加所需的索引位置,调用函数如下:

function increment_index(v, i) {
    return replaceNthMatch(v, /(\d+)/, i, function (val) {
        return parseInt(val, 10) + 1;
    });
}