Javascript Regex:如何查找每个子表达式的索引?

时间:2012-07-19 19:58:53

标签: javascript regex

假设我有字符串:BLAH BLAH BLAH copy 2。 我想找到这两个部分的索引,单词'copy'和一个可能跟随copy一词的数字。

我有正则表达式:/(copy)\s+([0-9]+)$/i成功匹配上述字符串中的copy和2。如何找到数字2的索引?我知道我可以使用.index来找到匹配测试'副本2'的位置,但我想得到'2'的位置,这样我就可以增加它。

4 个答案:

答案 0 :(得分:1)

你应该使用正则表达式/^(.*?copy\s+)(\d+)$/i,然后$ 1的长度是$ 2(副本号)的位置。

修改:您的测试代码是(fiddle):

var str = "BLAH BLAH BLAH copy 2";
var m = str.match(/^(.*?copy\s+)(\d+)$/i);
alert("Found '" + m[2] + "' at position " + m[1].length);

答案 1 :(得分:1)

如果稍微修改正则表达式,则可以计算数字的索引:

var matches = "BLAH BLAH BLAH copy 2".match(/(copy)(\s+)([0-9]+)$/i);
var numberIndex = matches.index + matches[1].length + matches[2].length;

但是你真的不需要这个来增加数字:

var matches = "BLAH BLAH BLAH copy 2".match(/(copy)\s+([0-9]+)$/i);
var incremented = (+matches[2]) + 1;

答案 2 :(得分:1)

如果您需要使用递增的数字替换副本号,请使用replace加上替换函数:

'BLAH BLAH BLAH copy 2'.replace(/(copy )(\d+)/, function (s, s1, s2) {
    return s1 + (Number(s2) + 1);
});

答案 3 :(得分:0)

将正则表达式/(copy)\s+([0-9]+)$/i更改为/^((.*)(copy)\s+)([0-9]+)$/i

然后copy的位置是$2的长度,数字的位置是$1的长度。该号码将在$4