假设我有字符串:BLAH BLAH BLAH copy 2
。我想找到这两部分的索引,“复制”这个词和一个可能跟在“复制”这个词后面的数字。
我有 regex:/(copy)\s+([0-9]+)$/i
成功匹配上面字符串中的 copy 和 2 。如何找到数字 2 的索引?我知道我可以使用 .index 来查找匹配的测试“副本 2”的位置,但我想获得“2”的位置,以便我可以增加它。
假设我有字符串:BLAH BLAH BLAH copy 2
。我想找到这两部分的索引,“复制”这个词和一个可能跟在“复制”这个词后面的数字。
我有 regex:/(copy)\s+([0-9]+)$/i
成功匹配上面字符串中的 copy 和 2 。如何找到数字 2 的索引?我知道我可以使用 .index 来查找匹配的测试“副本 2”的位置,但我想获得“2”的位置,以便我可以增加它。
您应该使用正则表达式/^(.*?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);
如果稍微修改正则表达式,可以计算出数字的索引:
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;
如果您需要用递增的数字替换副本编号,请使用replace
plus 替换函数:
'BLAH BLAH BLAH copy 2'.replace(/(copy )(\d+)/, function (s, s1, s2) {
return s1 + (Number(s2) + 1);
});
将正则表达式更改/(copy)\s+([0-9]+)$/i
为/^((.*)(copy)\s+)([0-9]+)$/i
那么 的位置copy
是 的长度,$2
数字的位置是 的长度$1
。号码将在$4