天天看點

JS (javascript) 中 replace 詳解

replace() 方法的參數 replacement 可以是函數而不是字元串。在這種情況下,每個比對都調用該函數,它傳回的字元串将作為替換文本使用。該函數的第一個參數是比對模式的字元串。接下來的參數 是與模式中的子表達式比對的字元串,可以有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明了比對在 stringObject 中出現的位置。最後一個參數是 stringObject 本身。

下文展示了幾種javascript正則表示式的repalce方式,有些方式我們很少在别的地方看到,如第二種和第三方中方法。

//下面的例子用來擷取url的兩個參數,并傳回urlRewrite之前的真實Url

var url="http://www.qidian.com/BookReader/1017141,20361055.aspx";

//方式一,最簡單常用的方式

var rep=url.replace(reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");

alert(rep);

//方式二 ,采用固定參數的回調函數

var rep2=url.replace(reg,function(m,p1,p2,p3){return p1+"ShowBook.aspx?bookId="+p3+"&chapterId="+p3});

alert(rep2);

//方式三,采用非固定參數的回調函數

var rep3=url.replace(reg,function(){var args=arguments; return args[1]+"ShowBook.aspx?bookId="+args[2]+"&chapterId="+args[3];});

alert(rep3);

//方法四

//方式四和方法三很類似, 除了傳回替換後的字元串外,還可以單獨擷取參數

var bookId;

var chapterId;

function capText()

{

}

var rep4=url.replace(reg,capText);

alert(rep4);

alert(bookId);

alert(chapterId);

//除了使用replace方法擷取正則表示式的分組外,還可以使用test ,exec方法擷取分組,隻是手法有所不同而已

var m=reg2.exec("http://www.qidian.com/BookReader/1017141,20361055.aspx");

var s="";

//擷取所有的分組

for (i = 0; i < m.length; i++) {

alert(s);

bookId=m[2];

chapterId=m[3];

//使用test方法擷取分組

reg3.test("http://www.qidian.com/BookReader/1017141,20361055.aspx");

//擷取三個分組

alert(RegExp.$1);

alert(RegExp.$2);

alert(RegExp.$3);

兩個例子(證明,replace傳入正則參數和字元傳參數結果不同):

alert("123".replace("1",function(){var un;return un;})); //彈出undefined23

alert("123".replace(new RegExp("1"),function(){var un;return un;})); //彈出23

繼續閱讀