JavaScript replace()第二個引數為函式時的引數

admin發表於2018-02-18

replace()函式具有替換功能,它可以具有兩個引數,第一個引數可以是要被替換的字串或者匹配要被替換字串的正規表示式,第二個引數可以是替換文字或者一個函式,下面看一下關於replace()函式的幾個程式碼例項。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var str="I love antzone and you?";
console.log(str.replace("an","java"));

上面的程式碼只能夠替換字串中的第一個指定子字串。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var str="I love antzone and you?";
var reg=/an/g;
console.log(str.replace(reg,"java"));

上面的程式碼可以將字串中的所有指定子字串替換掉。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var str="I love antzone and you?";
console.log(str.replace("an",function(){
  return "java"}
));

上面的程式碼中,第二個引數是一個函式,可以用此函式的返回值替換字串中指定的子字串。當第二個引數為函式的時候,其實這個函式可以傳遞引數的,下面就通過程式碼例項介紹一下關於函式的引數問題。

程式碼如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<script type="text/javascript">
var url = "http://www.softwhy.com/forum.php?mod=viewthread&tid=14743&extra=page%3D1";
//第一引數為字串
console.group("字串");
var oneResult = url.replace("www.softwhy.com",function(){
  console.log("replace輸入引數:%o",arguments);
  var val = /www.softwhy.com/.exec(url);
 
  console.log("exec輸出引數:%o",val);
                                                     
  console.assert(arguments[0] === val[0]);
  console.assert(arguments[1] === val["index"]);
  console.assert(arguments[2] === val["input"]);
  return "antzone";
});
console.log("replace返回字串:"+oneResult);
console.groupEnd("字串");
             
//第一引數為正規表示式
console.group("正規表示式");
var regexp_global = /[?&](\w+)=([^&]*)/g;
var count = 0;
var twoResult = url.replace(regexp_global,function(){
  console.log("第"+(count++)+"次執行");
  console.log("replace輸入引數:%o",arguments);
  var val = regexp_global.exec(url);
  console.log("exec輸出引數:%o",val);
                                                     
  console.assert(arguments[0] === val[0]);
  console.assert(arguments[1] === val[1]);
  console.assert(arguments[2] === val[2]);
  console.assert(arguments[3] === val["index"]);
  console.assert(arguments[4] === val["input"]);
  return count;
});
console.log("replace返回字串:"+twoResult);
console.groupEnd("正規表示式");
</script>
</head>
<body>
 
</body>
</html>

在上面的程式碼中,分別演示了replace()函式第一引數是普通字串和正規表示式的時候,第二個函式引數傳遞引數的情況,下面分別做一下簡單的說明:

第一個引數是普通字串:

螞蟻部路演示一

當第一個引數是普通字串的時候,那麼只會替換原字串中的第一個子字串,也就是說只會執行一次替換操作,為函式傳遞的引數和以普通字串引數作為正規表示式執行exec()函式返回的陣列的元素是相同的。

第一個引數是正規表示式:

螞蟻部路演示二

由於篇幅原因,這裡只是擷取了一部分執行結果內容,replace()函式的第一個引數是正規表示式,並且執行的是全域性匹配,那麼第二個函式引數會多次被呼叫,每次被呼叫傳遞的引數,也是和regexp_global.exec(url)返回的陣列的元素內容是相同的。

相關文章