javascript中replace的高級運用

除了咱們常用的replace()形式正則表達式

stringObject.replace(regexp/substr,replacement)bash

replace方法的第二個參數也能夠是一個函數,形如:函數

stringObject.replace(regexp/substr,function(){});spa

這個函數應該有個return值,表示應該被替換的匹配項。code

下面會根據正則的匹配項和捕獲組,分2種狀況,總結第二個參數function的具體用法。regexp

狀況1.當只有一個匹配項的(即與模式匹配的字符串)狀況下,會向該函數傳遞三個參數:模式的匹配項,模式匹配項在字符串中的位置和原始字符串,形如:字符串

stringObject.replace(
	regexp/substr,
	function(match,pos,originalText){}
);

複製代碼

下面是實例demo:string

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.在正則表達式中定義了多個捕獲組的狀況下,傳遞給函數的參數依次是模式的匹配項,第一個捕獲組的匹配項,第二個捕獲組的匹配項……,可是,最後兩個參數依然是模式的匹配項在字符串中的位置和原始字符串。io

下面是根據上面的demo進行稍加修改,console

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}
複製代碼
相關文章
相關標籤/搜索