一般情況下我們可能會用到Regex去替換文本:
複製代碼 代碼如下:
var a = "abc123aXc";
a.replace(/a.c/g, 'ZZ');
我們可以用函數來定義進階替換,而不是一個簡單的字串。比如:
<script> function reverseMatch(str) { return str.split('').reverse().join(''); } var a = "www jb51 net"; a=a.replace(/\w+/g, reverseMatch); alert(a); </script> [/code] 執行結果為: <div class="codetitle"><span><U>複製代碼</u></span> 代碼如下:</div><div class="codebody" id="code91699"> www 15bj ten
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
我們看到,當Regex每產生一次匹配時,會觸發替換函數並將匹配字串作為參數傳到替換函數中。當Regex中定義了子匹配(submatch)時,甚至可以做更進階的事情,替換函數可以根據不同的子匹配來作出相應的處理。比如我們要對網頁中的某些指定的實體代碼轉化為特殊字元:
[code]
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
function deentityify(a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
}
var a = "<a href="http://jb51.net/">";
a.replace(/&([^&;]+);/g, deentityify);
執行結果為:
<a href="http://jb51.net/">
如果我們知道了傳遞參數的規則就會很清楚其原理了。事實上,如果在Regex中定義了子匹配,那麼參數的長度會隨著子匹配的個數改變,如果沒有定義子匹配,那麼長度是固定的。傳參的規則為:
匹配字串本身
所有子匹配(如果定義了)
匹配字串在原始字串中的位置