2012-07-19 76 views
1

假设我有字符串:BLAH BLAH BLAH copy 2。 我想找到两个部分的索引,单词'复制'和一个可能跟随单词复制的数字。Javascript正则表达式:如何查找每个子表达式的索引?

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

回答

1

如果你需要用递增的数字来代替拷贝数,使用replace加上替代品功能:

'BLAH BLAH BLAH copy 2'.replace(/(copy)(\d+)/, function (s, s1, s2) { 
    return s1 + (Number(s2) + 1); 
}); 
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); 
+0

不总是。 \ s +表示可能有一个或多个空格。 – 2012-07-19 20:06:27

+1

不,你不知道有多少空白。 – PointedEars 2012-07-19 20:06:32

+0

是的,它会***总是***,不管有多少空白字符:) – 2012-07-19 20:19:07

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; 
0

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

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

相关问题