使用正則表達式 RegExp

寫個匹配郵箱的 RegExp 仇轻?

相信有很多人都遇到過這樣的需求:在頁面表單做一個對輸入郵箱字符串的合法性校驗。一般情況下疹鳄,不會正則表達式的小伙伴都是嘴角輕輕上揚硫兰,云淡風輕地在搜索引擎返回的結果列表中尋找自己想要的答案。對于一般的情況來說表蝙,網(wǎng)上的答案便足以應付PM的要求拴测。但是,當你遇上奇葩的PM和奇葩的需求時...
當然府蛇,匹配郵箱只是正則表達式的一個常見應用集索,它還可以延伸到匹配網(wǎng)址,匹配手機號汇跨,匹配特殊字符串等等务荆。正則表達式就如同一個多面過濾器,對被驗證的對象擁有者高度自定義和嚴格的校驗標準穷遂。不說精通函匕,至少能看懂并敲出簡單實用的正則表達式是任何一個碼農(nóng)要掌握的基本技能。立地看前端蚪黑,本文就正則表達式在 JS 中的基礎功能盅惜,對如何編寫正則表達式做一個記錄。


注意:
經(jīng)過我?guī)状螠y試忌穿,在 JS 中抒寂,直接寫出 RegExp 字面量形式的執(zhí)行速度要比調(diào)用 RegExp 對象構建快一些(個人實踐結果),因此文章統(tǒng)一是用字面量形式表示正則表達式掠剑。

在 JS 中表示正則表達式

我們都知道屈芜,在 JS 中正則表達式用字面量形式表示的語法為:

var reg1 = /pattern/attributes;

pattern 是一個字符串,表示匹配的模式朴译;
attributes 是 "g","i","m" 三個字符中的一個或多個井佑,稱為修飾符或者匹配屬性糕珊。
JS 是用斜杠符號/把匹配模式包起來的,而里面的 pattern 模式就是要花力氣研究的東西毅糟。

中括號表達式 [ exp ]

中括號表達式 [ exp ](英文 exp 是 expression 表達式的縮寫)表示了匹配一個范圍內(nèi)的文本或字符串红选。譬如 [abc] 就是要匹配 "a"或者"b"或者"c"。它還支持這樣的寫法:

  • [ abc ] : 查找方括號內(nèi)的任何字符
  • [ ^abc ] : 查找不在方括號內(nèi)的任何字符姆另,也就是既不是"a"也不是"b"也不是"c"的字符
  • [ 0-9 ] : 查找任何從 0 至 9 的數(shù)字
  • [ a-z ] : 查找任何從小寫 a 到小寫 z 的字符
  • [ A-Z ] : 查找任何從大寫 A 到大寫 Z 的字符
  • [ A-z ] : 查找任何從大寫 A 到小寫 z 的字符
  • [ adgk ] : 查找給定集合內(nèi)的任何字符
  • [ ^adgk ] : 查找給定集合外的任何字符

舉例:我要檢測任意字符串中的大寫字母喇肋,要怎么寫呢?

var reg = /[A-Z]/; // 就這么簡單
var str = "abcX1289"
console.log(reg.exec(str)); // "X"

限定符

限定符用來指定正則表達式的一個給定組件必須要出現(xiàn)多少次才能滿足匹配迹辐。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6種蝶防。

  • * : 匹配前面的子表達式零次或多次。例如明吩,zo* 能匹配 "z" 以及 "zoo"间学。* 等價于{0,}。
  • + : 匹配前面的子表達式一次或多次印荔。例如低葫,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"仍律。+ 等價于 {1,}嘿悬。
  • ? : 匹配前面的子表達式零次或一次。例如水泉,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 善涨。? 等價于 {0,1}。
  • {n} : n 是一個非負整數(shù)草则。匹配確定的 n 次钢拧。例如,'o{2}' 不能匹配 "Bob" 中的 'o'炕横,但是能匹配 "food" 中的兩個 o源内。
  • {n,} : n 是一個非負整數(shù)。至少匹配n 次看锉。例如姿锭,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o伯铣。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'轮纫。
  • {n,m} : m 和 n 均為非負整數(shù)腔寡,其中n <= m。最少匹配 n 次且最多匹配 m 次掌唾。例如放前,"o{1,3}" 將匹配 "fooooood" 中的前三個 o忿磅。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數(shù)之間不能有空格凭语。

特別字符

  • $ : 匹配輸入字符串的結尾位置葱她。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'
  • ( ) : 標記一個子表達式的開始和結束位置似扔。子表達式可以獲取供以后使用
  • . : 匹配除換行符 \n之外的任何單字符
  • \ : 將下一個字符標記為或特殊字符吨些、或原義字符、或向后引用炒辉、或八進制轉義符
  • ^ : 匹配輸入字符串的開始位置豪墅,除非在方括號表達式中使用,此時它表示不接受該字符集合
  • | : 指明兩項之間的一個選擇
  • \w : 查找單詞字符
  • \W : 查找非單詞字符
  • \d : 查找數(shù)字
  • \D : 查找非數(shù)字字符
  • \s : 查找空白字符
  • \S : 查找非空白字符
  • \b : 匹配單詞邊界
  • \B : 匹配非單詞邊界
  • \n : 查找換行符
  • \r : 查找回車符

總結

今天在這里是稍微總結了下正則表達式的基本知識黔寇,簡單的正則是能寫了偶器,能看了。但是要深入了解正則表達式并且高效運用缝裤,還早著呢F梁洹?所以下一篇有關正則的文章題目應該就是“深入探索正則表達式的運用”憋飞。
不過亭枷,這個我感覺急不來,得有時間學搀崭,有時間寫才行叨粘。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘤睹,隨后出現(xiàn)的幾起案子升敲,更是在濱河造成了極大的恐慌,老刑警劉巖轰传,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驴党,死亡現(xiàn)場離奇詭異,居然都是意外死亡获茬,警方通過查閱死者的電腦和手機港庄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恕曲,“玉大人鹏氧,你說我怎么就攤上這事∨逡ィ” “怎么了把还?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我吊履,道長安皱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任艇炎,我火速辦了婚禮酌伊,結果婚禮上,老公的妹妹穿的比我還像新娘缀踪。我一直安慰自己居砖,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布辜贵。 她就那樣靜靜地躺著悯蝉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪托慨。 梳的紋絲不亂的頭發(fā)上鼻由,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音厚棵,去河邊找鬼蕉世。 笑死,一個胖子當著我的面吹牛婆硬,可吹牛的內(nèi)容都是我干的狠轻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼彬犯,長吁一口氣:“原來是場噩夢啊……” “哼向楼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎划乖,沒想到半個月后族檬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悲雳,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灭返。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坤邪,靈堂內(nèi)的尸體忽然破棺而出熙含,到底是詐尸還是另有隱情,我是刑警寧澤罩扇,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布婆芦,位于F島的核電站怕磨,受9級特大地震影響喂饥,放射性物質(zhì)發(fā)生泄漏消约。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一员帮、第九天 我趴在偏房一處隱蔽的房頂上張望或粮。 院中可真熱鬧,春花似錦捞高、人聲如沸氯材。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氢哮。三九已至,卻和暖如春型檀,著一層夾襖步出監(jiān)牢的瞬間冗尤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工胀溺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裂七,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓仓坞,卻偏偏與公主長得像背零,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子无埃,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容