javascript中正則表達式總結

****為什么要使用正則表達式****
正則表達式通過由普通字符和特殊字符組成的文字模板完成對字符串的校驗,搜索,替換吞歼。在javascript中類似這樣
/^1\d{10}$/
上面的這個簡單的正則用來匹配手機號

至于說正則表達式到底有什么意義壮虫,借由《精通正則表達式》里面的一句話來概括好了。

?“如果羅列計算機軟件領域的偉大發(fā)明思瘟,我相信絕對不會超過二十項荸百,在這個名單當中,當然應該包括分組交換網(wǎng)絡滨攻,Web够话,Lisp,哈希算法光绕,UNIX女嘲,編譯技術,關系模型诞帐,面向?qū)ο笮滥幔琗ML這些大名鼎鼎的家伙,而正則表達式也絕對不應該被漏掉停蕉。

?對很多實際工作而言愕鼓,正則表達式簡直是靈丹妙藥钙态,能夠成百倍的提高開發(fā)效率和程序質(zhì)量【軉”

****正則表達式的生成****
在javascript中生成正則表達式的方式有兩種
調(diào)用RegExp對象的構造函數(shù)
var reg = new RegExp('^[a-z] [0-9][align=left][font=微軟雅黑][size=3][color=#000000][backcolor=white]其中第一個參數(shù)是匹配模式驯绎,第二個參數(shù)是可選參數(shù)(g, i, m),分別用于指定全局匹配、區(qū)分大小寫的匹配和多行匹配谋旦。這種方式會在正則表達式運行時編譯(runtime compilation)剩失。如果你知道正則表達式模式將會改變,或者你事先不知道什么模式册着,而是從另一個來源獲取拴孤,如用戶輸入,這些情況都可以使用構造函數(shù)甲捏。[/backcolor][/color][/size][/font][/align]
[*][align=left][font=微軟雅黑][size=3][color=#000000][backcolor=white]使用正則表達式字面值演熟,將匹配模式封閉在兩個斜杠中[/backcolor][/color][/size][/font][/align][code]var reg = /^[a-z] [0-9]$/gi
當表達式被賦值時,字面量形式提供正則表達式的編譯(compilation)司顿,當正則表達式保持為常量時一般使用字面量方式芒粹。例如當你在循環(huán)中使用字面量構造一個正則表達式時,正則表達式不會在每一次迭代中都被重新編譯(recompiled)

****正則表達式的組成****
正則表達式的文字模板是有很多不同類型的字符組成的大溜,包括:
元字符化漆,轉(zhuǎn)義字符,限定符钦奋,字符組座云,或結構,括號分組
元字符
字符
含義
. 匹配除了換行符(n)以外的所有字符
w 匹配字母付材,數(shù)字朦拖,或者漢字
W 匹配除了字母,數(shù)字厌衔,漢字以外的其他字符
d 匹配數(shù)字
D 匹配除了數(shù)字以外的其他字符
s 匹配任意的空白符(f, n, r, t, v)
S 匹配空白符以外的任意字符
b 匹配單詞的開始或者結束
B 匹配單詞的非開始或者結束
^ 匹配行首
$ 匹配行尾

****轉(zhuǎn)義字符****

  • ? | { [ ( ) ] }^ $ . # 和 空白 這些字符都是需要轉(zhuǎn)義的璧帝。例如我們要匹配{。
    {

限定符
字符
含義

  • 匹配零次至多次
    匹配一次至多次
    富寿? 匹配零次或一次
    {2,} 至少匹配兩次
    {10} 匹配10次
    {{2, 8}} 至少匹配兩次之多匹配八次

字符組[]
中括號字符組用來匹配括號內(nèi)的字符之一
'fasfagxfasdfyfasfz'.split(/[xyz]/) //["fasfag", "fasdf", "fasf", ""]
還有一種排除性字符組
'xaxbycz'.split(/[^xyz]/) //["x", "x", "y", "z"]
或結構 |
例如c|d匹配或者d
/c|d/.test('af') // false
/c|d/.test('ad') // true

****括號分組****
(cd){1,} 可以匹配cdcd..等, 其中cd便是一個分組睬隶。
/(cd){1,}$/.test('cdcd') //true

****貪婪模式和非貪婪模式****
默認情況下,所有的限定詞都是貪婪模式作喘,表示盡可能多的去捕獲字符理疙。而在限定詞后增加“?”,則是非貪婪模式,表示盡可能少的去捕獲字符晃危。
'ccccccd'.match(/c /) //["ccccc"]显沈, 貪婪模式, 捕獲所有
'ccccccd'.match(/c 秦陋?/) //["c"]各谚, 非貪婪模式, 只捕獲到第一

****捕獲分組****
在實際應用中我們很有可能需要獲取到匹配的字符串省核,例如我們要將字符串"萬里碧空飄著朵朵白云"替換成"萬里碧空沒有一朵白云"
"萬里碧空飄著朵朵白云".replace(/(萬里碧空)飄著朵朵白云/, '$1沒有一朵白云')
捕獲性分組會創(chuàng)建反向引用墩虹,js中可以通過 $ number 或者 "反斜杠" number" 表示法進行引用豌熄。

注意:
反斜杠 number這種引用可以在正則表達式中使用授嘀,可用于匹配不同位置的相同子串,例如:
'www.bai.bai.com'.replace(/([a-z] ).\1/, '$1') // www.bai.com

****非捕獲性分組****
非捕獲性分組锣险,通常由一對括號加上”?:”加上子表達式組成蹄皱,非捕獲性分組不會創(chuàng)建反向引用,就好像沒有括號一樣芯肤。捕獲性分組和無捕獲性分組在搜索效率方面也沒什么不同巷折,沒有哪一個比另一個更快。
/^(?:\d )/

****正則表達式的方法****
test
檢索字符串中的指定子串崖咨,返回布爾值
/^\d[a-zA-Z]{3}$/.test('1aac') // true

exec
返回一個數(shù)組锻拘,數(shù)組中的第一個條目是第一個匹配
/^\d[a-zA-Z]{3}$/.exec('1aac') // ["1aac"]

String可以使用正則表達式的方法
search
返回子串的開始位置
'a12b2334c34'.search(/\d{4}/) // 4
match
返回匹配到的子串
'a12b2334c34'.match(/\d{4}/) // ["2334"]
replace
替換匹配到的子串
'a12b2334c34'.replace(/\d{4}/, 'cccc') // "a12bccccc34"
split
將字符串分割成數(shù)組
'a12b2334c34'.split(/\d{4}/) // ["a12b", "c34"]

斷言
正向先行斷言 (?=exp)
代表字符串中的一個位置,緊接該位置之后的字符序列能夠匹配 exp
/f(?=234)/.test('123abcf234acd') //true
負向先行斷言(?!exp)
代表字符串中的一個位置击蹲,緊接該位置之后的字符序列不能匹配 exp
/f(?!234)/.test('123abcf234acd') //false

****常用的正則表達式****
Email 地址:
^\w ([- .]\w )@\w ([-.]\w ).\w ([-.]\w )$
URl驗證
[a-zA-z] ://[^\s]
或 ^http://([\w-] .) [\w-] (/[\w-./?%&=]*)?$
密碼驗證
(?!^[0-9] $)(?!^[A-z] $)(?![A-z0-9] $)[\s\u4e00-\u9fa5]{6,16}$
郵編驗證
[1-9]d{5}(?!d)
手機號碼驗證
^1\d{10}$
漢字驗證
^[\u4e00-\u9fa5]{0,}$

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末署拟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歌豺,更是在濱河造成了極大的恐慌推穷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件世曾,死亡現(xiàn)場離奇詭異缨恒,居然都是意外死亡,警方通過查閱死者的電腦和手機轮听,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門骗露,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人血巍,你說我怎么就攤上這事萧锉。” “怎么了述寡?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵柿隙,是天一觀的道長。 經(jīng)常有香客問我鲫凶,道長禀崖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任螟炫,我火速辦了婚禮波附,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己掸屡,他們只是感情好封寞,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仅财,像睡著了一般狈究。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盏求,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天抖锥,我揣著相機與錄音,去河邊找鬼碎罚。 笑死宁改,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的魂莫。 我是一名探鬼主播还蹲,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耙考!你這毒婦竟也來了谜喊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤倦始,失蹤者是張志新(化名)和其女友劉穎斗遏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞋邑,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡诵次,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了枚碗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逾一。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肮雨,靈堂內(nèi)的尸體忽然破棺而出遵堵,到底是詐尸還是另有隱情,我是刑警寧澤怨规,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布陌宿,位于F島的核電站,受9級特大地震影響波丰,放射性物質(zhì)發(fā)生泄漏壳坪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一掰烟、第九天 我趴在偏房一處隱蔽的房頂上張望爽蝴。 院中可真熱鬧扩灯,春花似錦、人聲如沸霜瘪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颖对。三九已至,卻和暖如春磨隘,著一層夾襖步出監(jiān)牢的瞬間缤底,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工番捂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留个唧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓设预,卻偏偏與公主長得像徙歼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鳖枕,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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

  • 推薦幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,480評論 9 151
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發(fā)攻城獅閱讀 4,584評論 0 23
  • 正則表達式到底是什么東西魄梯?字符是計算機軟件處理文字時最基本的單位,可能是字母宾符,數(shù)字酿秸,標點符號,空格魏烫,換行符辣苏,漢字等...
    獅子挽歌閱讀 2,141評論 0 9
  • 初衷:看了很多視頻、文章哄褒,最后卻通通忘記了稀蟋,別人的知識依舊是別人的,自己卻什么都沒獲得呐赡。此系列文章旨在加深自己的印...
    DCbryant閱讀 3,993評論 0 20
  • 注:本篇文章只為方便查看糊治,特此保留,如有冒犯罚舱,敬請諒解>肌!管闷! 本文目標 30分鐘內(nèi)讓你明白正則表達式是什么粥脚,并對它...
    阿杰Alex閱讀 1,479評論 0 10