下面的字符串表示一个 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"。

多谢

2014-12-31 00:00:00
问题评论:

回答:

如果模式是一致的 (TEXT[NUMBER].TEXT[NUMBER].TEXT[NUMBER]),您可以匹配所有匹配项,然后选择第二个匹配。将一个简单的示例 (假设上述文本始终字符串字符和永远不会包含数字)︰

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

如果期望中混合和匹配您的括号中的数字的数字,则无法更新类似 regex /[d]/g,然后选择匹配的括号内的编号。

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

.*[(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

感谢您这两个答案这就有了更好的方法,另一种思考解决方案。

最后我找到绝好的解决方案给这本答案http://stackoverflow.com/a/7958627/1532797 ,可用于许多其他用途。

在我种情况下我可以简单地增加调用此类函数所需的索引位置︰

function increment_index(v, i) {
    return replaceNthMatch(v, /(d+)/, i, function (val) {
        return parseInt(val, 10) + 1;
    });
}
请输入您的翻译

Regular expression to match number in the middle

确认取消