欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 正則表達(dá)式觸發(fā)函數(shù)進(jìn)行高級(jí)替換

 更新時(shí)間:2010年03月15日 11:33:10   作者:  
如果在正則表達(dá)式中定義了子匹配,那么參數(shù)的長(zhǎng)度會(huì)隨著子匹配的個(gè)數(shù)改變,如果沒(méi)有定義子匹配,那么長(zhǎng)度是固定的。
一般情況下我們可能會(huì)用到正則表達(dá)式去替換文本:
復(fù)制代碼 代碼如下:

var a = "abc123aXc";
a.replace(/a.c/g, 'ZZ');

我們可以用函數(shù)來(lái)定義高級(jí)替換,而不是一個(gè)簡(jiǎn)單的字符串。比如:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]

我們看到,當(dāng)正則表達(dá)式每產(chǎn)生一次匹配時(shí),會(huì)觸發(fā)替換函數(shù)并將匹配字符串作為參數(shù)傳到替換函數(shù)中。當(dāng)正則表達(dá)式中定義了子匹配(submatch)時(shí),甚至可以做更高級(jí)的事情,替換函數(shù)可以根據(jù)不同的子匹配來(lái)作出相應(yīng)的處理。比如我們要對(duì)網(wǎng)頁(yè)中的某些指定的實(shí)體代碼轉(zhuǎn)化為特殊字符:
[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);

執(zhí)行結(jié)果為:

<a >
如果我們知道了傳遞參數(shù)的規(guī)則就會(huì)很清楚其原理了。事實(shí)上,如果在正則表達(dá)式中定義了子匹配,那么參數(shù)的長(zhǎng)度會(huì)隨著子匹配的個(gè)數(shù)改變,如果沒(méi)有定義子匹配,那么長(zhǎng)度是固定的。傳參的規(guī)則為:

匹配字符串本身
所有子匹配(如果定義了)
匹配字符串在原始字符串中的位置

相關(guān)文章

最新評(píng)論