JavaScript 字符串替換
■知識(shí)點(diǎn)
使用字符串的replaceO方法可以替換指定的子字符串。該方法包含2個(gè)參數(shù),第1個(gè)參數(shù)表示執(zhí)行匹配的正則表達(dá)式,第2個(gè)參數(shù)表示準(zhǔn)備替換匹配的子字符串。
■實(shí)例設(shè)計(jì)
【示例1】下面的代碼使用replaceO方法替換字符串中“html”為“htm”。
var s = "http://www.mysite.cn/index.html";
var b = s.replace( /html/, "htm" ) ; //把字符串 html 替換為 htm
console.log ( b ); //返回字符串"http://www.mysite .cn/index.htm"
該方法第1個(gè)參數(shù)是一個(gè)正則表達(dá)式對(duì)象,也可以傳遞字符串。
【示例2】下面的代碼在使用replaceO方法時(shí),靈活使用替換函數(shù)修改匹配字符串。
var s = "http://www.mysite.cn/index.html";
function f ( x ) { //替換文本函數(shù)
return x. substring ( x. lastlndexOf (".") +1, x. length - 1 ) //獲取擴(kuò)展名部分字符串
}
var b = s.replace ( / (html) /, f (s) ) ; //調(diào)用函數(shù)指定替換文本操作
console, log ( b ); //返回字符串"http://www.mysite.cn/index.htm"
replace方法實(shí)際上執(zhí)行的是同時(shí)查找和替換兩個(gè)操作。它將在字符串中查找與正則表達(dá)式相匹配的子字符串,然后調(diào)用第2個(gè)參數(shù)值或替換函數(shù)替換這些子字符串。如果正則表達(dá)式具有全局性質(zhì)g,那么將替換所有的匹配子字符串;否則,它只替換第一個(gè)匹配子字符串。
【示例3】在replaceO方法中約定了一個(gè)特殊的字符($),這個(gè)美元符號(hào)如果附加一個(gè)序號(hào)就表示對(duì)正則表達(dá)式中匹配的子表達(dá)式存儲(chǔ)的字符串引用。
var s = "JavaScript";
var b = s . replace ( / (Java) (Script) /, "$2-$1"), //交換位置
console, log ( b ); //返回字符串"Script-Java"
在上面的示例中,正則表達(dá)式/Gava)(script)/中包含兩對(duì)小括號(hào),按順序排列,其中第1對(duì)小括號(hào)表示第1個(gè)子表達(dá)式,第2對(duì)小括號(hào)表示第2個(gè)子表達(dá)式,在replaceO方法的參數(shù)中可以分別使用字符串"$1"和"$2"來表示對(duì)它們匹配文本的引用。另外,美元符號(hào)與其他特殊字符組合還可以包含更多的語義,詳細(xì)說明可以參考下一章正則表達(dá)式的講解。
【示例4】下面的代碼把字符串中每個(gè)單詞轉(zhuǎn)換為首字母大寫形式顯示。
var s = ' javascript is script , is not java.’; //定義字符串
//定義替換文本函數(shù),參數(shù)為第1個(gè)子表達(dá)式匹配文本
var f = function($1){
//把匹配文本的首字母轉(zhuǎn)換為大寫
return $1.substring( 0, 1 ) .toUpperCase () + $1.substring( 1 ) .toLowerCase();}
var a = s . replace ( / (\b\w+\b) /g, f ) ; //匹配文本并進(jìn)行替換
console. log ( a ); //返回字符串"Javascript Is Script, Is Not Java."
在上面的示例中,替換函數(shù)的參數(shù)為特殊字符“sr,它表示正則表達(dá)式/(\b\w+\b)/中小括號(hào)匹配的文本,在函數(shù)結(jié)構(gòu)內(nèi)對(duì)這個(gè)匹配文本進(jìn)行處理,截取其首字母并轉(zhuǎn)換為大寫形式,余下字符全部小寫,然后返回新處理的字符串。replace方法在原文本中使用這個(gè)返回的新字符串替換掉每次匹配的子字符串。
【示例5】對(duì)于上面的示例,還可以進(jìn)一步延伸,使用小括號(hào)來獲取更多的匹配信息。例如,直接利用小括號(hào)傳遞單詞的首字母,然后進(jìn)行大小寫轉(zhuǎn)換處理,處理結(jié)果都是一樣的。
var s = 'javascript is script , is not java.'; //定義字符串
var f = function ($1, $2, $3) { //定義替換文本函數(shù),請(qǐng)注意參數(shù)的變化
return $2.toUpperCase()+$3;
}
var a = s.replace(八b(\w) (\w*)\b/g, f );
console.log( a );
在函數(shù)f()中,第1個(gè)參數(shù)表示每次匹配的文本,第2個(gè)參數(shù)表示第1個(gè)小括號(hào)的子表達(dá)式所匹配的文本,即單詞的首字母,第2個(gè)參數(shù)表示第2個(gè)小括號(hào)的子表達(dá)式所匹配的文本。
點(diǎn)擊加載更多評(píng)論>>