正則表達(dá)式提供了一種字符串匹配模式的描述形式卦羡,通過簡單的符號就能表達(dá)豐富的文本結(jié)構(gòu)。如
[a-z]+
就可以表示所有字母的組合麦到。
以下是在實際項目中使用得最多的三種情形绿饵。
1 判斷
如判斷用戶的輸入是否符合要求。通常使用正則表達(dá)式的 test 方法瓶颠,當(dāng)傳入的字符串符合正則表達(dá)式的模式要求時會返回 true拟赊。
如僅允許輸入數(shù)字,可用以下方法檢測:
function checkNum(inputStr){
return /^\d+$/.test(inputStr);
}
其中正則表達(dá)式 ^\d+$
中粹淋,第一個符號 ^ 表示字符串首吸祟,最后的 $ 表示字符串尾,加上這兩個表示必須整串字符完全跟模式匹配才返回 true桃移。而如果沒有屋匕,則只要字符串中包含符合模式的串就會返回 true。
2 尋找
在文本中尋找指定形式的匹配串谴轮,如手機(jī)號炒瘟、郵箱等吹埠。在 javascript 中第步,通常可以使用字符串對象的 match 方法缘琅。此時粘都,正則表達(dá)式作為 match 方法的參數(shù)傳入。
如刷袍,找出文本中所有的數(shù)字串:
function findNum(inputStr){
return inputStr.match(/\d+/g);
}
// 調(diào)用示例
console.log( findNum("a123abb90,78a909").join() );
上邊調(diào)用示例會輸出匹配的數(shù)組數(shù)據(jù):123,90,78,909
正則表達(dá)式 \d+ 表示數(shù)字串翩隧,而表達(dá)式對象 /\d+/ 外的 g 是一個選項,表示全局搜索呻纹,表明要找出所有的匹配項堆生。如果沒有這個 g,則只會返回第 1 個匹配結(jié)果雷酪。
此外淑仆,也可以使用正則表達(dá)式的 exec 方法,匹配第 1 個符合模式的字符串哥力。如 /\d+/.exec("a123abb90,78a909")
得到 123
當(dāng)然蔗怠,如果文本中不包括匹配的內(nèi)容則會返回 null墩弯。
3 替換
將文本中符合指定模式的匹配串替換成別的字符串,使用字符串的 replace 方法寞射。如渔工,將上邊示例字符串中的非數(shù)字部分替換成逗號,這種情形在對用戶輸入時去除干擾性輸入時經(jīng)常用到桥温。
function replaceNotNum(inputStr){
return inputStr.replace(/[^\d]+/g, ",");
}
// 調(diào)用示例
console.log( replaceNotNum("a123abb90,78a909") );
上邊調(diào)用示例會輸出結(jié)果:,123,90,78,909
同樣引矩,正則表達(dá)式后邊的 g 表示全局,如果沒有它侵浸,則只會替換掉第 1 個匹配的字符串脓魏。
有一種情形是替換時經(jīng)常碰到的:對匹配的內(nèi)容不是替換成另一個相同的字符串,而是在匹配的基礎(chǔ)上進(jìn)行調(diào)整通惫。如將上邊示例字符串中的連續(xù)數(shù)字統(tǒng)一加上中括號茂翔。此時可以:
function decorateNum(inputStr){
return inputStr.replace(/(\d+)/g, '[$1]');
}
// 調(diào)用示例
console.log( decorateNum('a123abb90,78a909') );
上邊調(diào)用示例會輸出結(jié)果:a[123]abb[90],[78]a[909]
正則表達(dá)式 ([\d]+)
加了括號,而替換的字符串中出現(xiàn)了一個$1
履腋,這是關(guān)鍵珊燎。因為替換的內(nèi)容跟匹配的內(nèi)容需要動態(tài)關(guān)聯(lián),需要一種關(guān)聯(lián)機(jī)制遵湖。這種機(jī)制就是悔政,括號中的內(nèi)容作為子匹配會進(jìn)行存儲,以供后續(xù)使用延旧,一共支持 $1 ~ $9
共 9 個存儲值谋国,這里再舉一個例子。
function exchangeNum(inputStr){
return inputStr.replace(/(\d)(\d)/g, '$2$1');
}
猜猜以下調(diào)用會輸出什么結(jié)果:
console.log( exchangeNum('12 34 56 78') );
4 語法文檔
至于想要匹配的內(nèi)容如何書寫正則表達(dá)式迁沫,這與需求相關(guān)芦瘾,可以在面臨實際問題時去翻閱語法說明或其它方式尋求答案。