除了我們經常使用的replace()
形式
stringObject.replace(regexp/substr,replacement)
,
replace
方法的第二個引數也可以是一個函式,形如:
stringObject.replace(regexp/substr,function(){});
這個函式應該有個return
值,表示應該被替換的匹配項。
下面會根據正則的匹配項和捕獲組,分2種情況,總結第二個引數function
的具體用法。
情況1.當只有一個匹配項的(即與模式匹配的字串)情況下
,會向該函式傳遞三個引數:模式的匹配項,模式匹配項在字串中的位置和原始字串,形如:
stringObject.replace(
regexp/substr,
function(match,pos,originalText){}
);
複製程式碼
下面是例項demo:
var str = "{a},{b}";
str.replace(/\{\w+\}/g,function(match,pos,original){
console.log(match);
console.log(pos);
console.log(original)
})
輸出結果是:
{a}
0
{a},{b}
{b}
4
{a},{b}
複製程式碼
情況2.在正規表示式中定義了多個捕獲組的情況下
,傳遞給函式的引數依次是模式的匹配項,第一個捕獲組的匹配項,第二個捕獲組的匹配項……,但是,最後兩個引數依然是模式的匹配項在字串中的位置和原始字串。
下面是根據上面的demo進行稍加修改,
var str = "{a},{b}";
str.replace(/\{(\w+)\}/g,function(match,capture,pos,original){
console.log(match);
console.log(capture);
console.log(pos);
console.log(original)
})
輸出結果是:
{a}
a
0
{a},{b}
{b}
b
4
{a},{b}
複製程式碼