正則表達(dá)式最常用的幾種形式

正則表達(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)芦瘾,可以在面臨實際問題時去翻閱語法說明或其它方式尋求答案。

參考文檔:https://www.runoob.com/regexp/regexp-tutorial.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末集畅,一起剝皮案震驚了整個濱河市近弟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺智,老刑警劉巖祷愉,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赦颇,居然都是意外死亡二鳄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門媒怯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來订讼,“玉大人,你說我怎么就攤上這事沪摄∏担” “怎么了纱烘?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祈餐。 經(jīng)常有香客問我擂啥,道長,這世上最難降的妖魔是什么帆阳? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任哺壶,我火速辦了婚禮,結(jié)果婚禮上蜒谤,老公的妹妹穿的比我還像新娘山宾。我一直安慰自己,他們只是感情好鳍徽,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布资锰。 她就那樣靜靜地躺著,像睡著了一般阶祭。 火紅的嫁衣襯著肌膚如雪绷杜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天濒募,我揣著相機(jī)與錄音鞭盟,去河邊找鬼。 笑死瑰剃,一個胖子當(dāng)著我的面吹牛齿诉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晌姚,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼粤剧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舀凛?” 一聲冷哼從身側(cè)響起俊扳,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猛遍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體号坡,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡懊烤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宽堆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腌紧。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畜隶,靈堂內(nèi)的尸體忽然破棺而出壁肋,到底是詐尸還是另有隱情号胚,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布浸遗,位于F島的核電站猫胁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跛锌。R本人自食惡果不足惜弃秆,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望髓帽。 院中可真熱鬧菠赚,春花似錦、人聲如沸郑藏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽必盖。三九已至峡捡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筑悴,已是汗流浹背们拙。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留阁吝,地道東北人砚婆。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像突勇,于是被迫代替她去往敵國和親装盯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355