假設我有字符串:BLAH BLAH BLAH copy 2
。 我想找到兩個部分的索引,單詞'複製'和一個可能跟隨單詞複製的數字。Javascript正則表達式:如何查找每個子表達式的索引?
我有正則表達式:/(copy)\s+([0-9]+)$/i
它成功地匹配上面的字符串的副本和2。我怎樣才能找到數字2的索引?我知道我可以使用.index找到匹配測試'copy 2'的位置,但我想獲得'2'的位置,以便我可以增加它。
假設我有字符串:BLAH BLAH BLAH copy 2
。 我想找到兩個部分的索引,單詞'複製'和一個可能跟隨單詞複製的數字。Javascript正則表達式:如何查找每個子表達式的索引?
我有正則表達式:/(copy)\s+([0-9]+)$/i
它成功地匹配上面的字符串的副本和2。我怎樣才能找到數字2的索引?我知道我可以使用.index找到匹配測試'copy 2'的位置,但我想獲得'2'的位置,以便我可以增加它。
如果你需要用遞增的數字來代替拷貝數,使用replace
加上替代品功能:
'BLAH BLAH BLAH copy 2'.replace(/(copy)(\d+)/, function (s, s1, s2) {
return s1 + (Number(s2) + 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);
如果修改正則表達式略有下降,數量的指數可以計算:
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;
變化正則表達式/(copy)\s+([0-9]+)$/i
到/^((.*)(copy)\s+)([0-9]+)$/i
隨後的copy
位置是$2
長度和數字的位置是$1
的長度。該號碼將在$4
不總是。 \ s +表示可能有一個或多個空格。 – 2012-07-19 20:06:27
不,你不知道有多少空白。 – PointedEars 2012-07-19 20:06:32
是的,它會***總是***,不管有多少空白字符:) – 2012-07-19 20:19:07