詳解javascript replace()第二個參數為函數時的參數用法

來源:互聯網
上載者:User

javascript的replace()第二個參數為函數時的參數:

replace()函數具有替換功能,它可以具有兩個參數,第一個參數可以是要被替換的字串或者匹配要被替換字串的Regex,第二個參數可以是替換文本或者一個函數,下面看一下關於replace()函數的幾個代碼執行個體。
代碼執行個體:
執行個體一:

<script>
varstr="I love jb51 and you?";
console.log(str.replace("jb","java"));
</script>

上面的代碼只能夠替換字串中的第一個指定子字串。
執行個體二:

<script>
varstr="I love jb51 and you?";
varreg=/jb/g;
console.log(str.replace(reg,"java"));
</script>

上面的代碼可以將字串中的所有指定子字串替換掉。
執行個體三:

<script>
varstr="I love jb51 and you?";
console.log(str.replace("jb",function(){
 return"java"}
));
</script>

上面的代碼中,第二個參數是一個函數,可以用此函數的傳回值替換字串中指定的子字串。當第二個參數為函數的時候,其實這個函數可以傳遞參數的,下面就通過代碼執行個體介紹一下關於函數的參數問題。
代碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<title>指令碼之家</title>
<script type="text/javascript">
varurl ="http://www.jb51.net/o.php?mod=viewthread&tid=14743&extra=page%3D1";
//第一參數為字串
console.group("字串");
varoneResult = url.replace("www.jb51.net",function(){
 console.log("replace輸入參數:%o",arguments);
 varval = /www.jb51.net/.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"jb51";
});
console.log("replace返回字串:"+oneResult);
console.groupEnd("字串");
     
//第一參數為Regex
console.group("Regex");
varregexp_global = /[?&](\w+)=([^&]*)/g;
varcount = 0;
vartwoResult = url.replace(regexp_global,function(){
 console.log("第"+(count++)+"次運行");
 console.log("replace輸入參數:%o",arguments);
 varval = 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"]);
 returncount;
});
console.log("replace返回字串:"+twoResult);
console.groupEnd("Regex");
</script>
</head>
<body>
  
</body>
</html>

在上面的代碼中,分別示範了replace()函數第一參數是一般字元串和Regex的時候,第二個函數參數傳遞參數的情況,下面分別做一下簡單的說明:
第一個參數是一般字元串:

當第一個參數是一般字元串的時候,那麼只會替換原字串中的第一個子字串,也就是說只會執行一次替換操作,為函數傳遞的參數和以一般字元串參數作為Regex執行exec()函數返回的數組的元素是相同的。
第一個參數是Regex:

由於篇幅原因,這裡只是截取了一部分運行結果內容,replace()函數的第一個參數是Regex,並且執行的是全域匹配,那麼第二個函數參數會多次被調用,每次被調用傳遞的參數,也是和regexp_global.exec(url)返回的數組的元素內容是相同的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.