1

假设我有字符串:BLAH BLAH BLAH copy 2。我想找到这两部分的索引,“复制”这个词和一个可能跟在“复制”这个词后面的数字。

我有 regex:/(copy)\s+([0-9]+)$/i成功匹配上面字符串中的 copy 和 2 。如何找到数字 2 的索引?我知道我可以使用 .index 来查找匹配的测试“副本 2”的位置,但我想获得“2”的位置,以便我可以增加它。

4

4 回答 4

1

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

编辑:您的测试代码是(小提琴):

var str = "BLAH BLAH BLAH copy 2";
var m = str.match(/^(.*?copy\s+)(\d+)$/i);
alert("Found '" + m[2] + "' at position " + m[1].length);
于 2012-07-19T20:04:51.597 回答
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;
于 2012-07-19T20:08:46.853 回答
1

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

'BLAH BLAH BLAH copy 2'.replace(/(copy )(\d+)/, function (s, s1, s2) {
    return s1 + (Number(s2) + 1);
});
于 2012-07-19T20:11:02.607 回答
0

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

那么 的位置copy是 的长度,$2数字的位置是 的长度$1。号码将在$4

于 2012-07-19T20:21:57.697 回答