在正則表達(dá)式中什乙,如果直接給出字符淋硝,就是精確匹配。/1w!/
用\d可以匹配一個(gè)數(shù)字父能,\w可以匹配一個(gè)字母或數(shù)字
????所以:
????????????'00\d'可以匹配'007'神凑,但無法匹配'00A';
????????????'\d\d\d'可以匹配'010'何吝;
????????????'\w\w'可以匹配'js'溉委;
?.? ? 可以匹配任意字符
????所以:
? ??????????'js.'可以匹配'jsp'、'jss'爱榕、'js!'等
要匹配變長的字符瓣喊,在正則表達(dá)式中,用*表示任意個(gè)字符(包括0個(gè))黔酥,用+表示至少一個(gè)字符藻三,用?表示0個(gè)或1個(gè)字符,用{n}表示n個(gè)字符絮爷,用{n,m}表示n-m個(gè)字符:
? ? 所以:
? ??????????\d{3}\s+\d{3,8}表示:
? ??????????\d{3}表示匹配3個(gè)數(shù)字趴酣,例如'010'梨树;
? ??????????\s可以匹配一個(gè)空格(也包括Tab等空白符)坑夯,所以\s+表示至少有一個(gè)空格,例如匹配' '抡四,'\t\t'等柜蜈;
? ??????????\d{3,8}表示3-8個(gè)數(shù)字,例如'1234567'
特殊字符指巡,在正則表達(dá)式中淑履,要用'\'轉(zhuǎn)義
? ???所以:
? ??????????\d{3}\-\d{3,8}? 匹配? '010-12345'
要做更精確地匹配,可以用[]表示范圍
? ? 例如:
? ??????????[0-9a-zA-Z\_]可以匹配一個(gè)數(shù)字藻雪、字母或者下劃線秘噪;
? ??????????[0-9a-zA-Z\_]+可以匹配至少由一個(gè)數(shù)字、字母或者下劃線組成的字符串勉耀,比如'a100'指煎,'0_Z','js2015'等等便斥;
? ??????????[a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下劃線至壤、$開頭,后接任意個(gè)由一個(gè)數(shù)字枢纠、字母或者下劃線像街、$組成的字符串,也就是JavaScript允許的變量名;
? ??????????[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精確地限制了變量的長度是1-20個(gè)字符(前面1個(gè)字符+后面最多19個(gè)字符)
A|B可以匹配A或B镰绎,所以(J|j)ava(S|s)cript可以匹配'JavaScript'脓斩、'Javascript'、'javaScript'或者'javascript'
^表示行的開頭畴栖,^\d表示必須以數(shù)字開頭
$表示行的結(jié)束俭厚,\d$表示必須以數(shù)字結(jié)束
除了簡單地判斷是否匹配之外,正則表達(dá)式還有提取子串的強(qiáng)大功能驶臊。用()表示的就是要提取的分組(Group)
? ? 例如:
? ??????????^(\d{3})-(\d{3,8})$分別定義了兩個(gè)組挪挤,可以直接從匹配的字符串中提取出區(qū)號(hào)和本地號(hào)碼:
????????????var? re =/^(\d{3})-(\d{3,8})$/;
????????????????????re.exec('010-12345');// ['010-12345', '010', '12345']
????????????????????re.exec('010 12345');// null
貪婪匹配
????????需要特別指出的是,正則匹配默認(rèn)是貪婪匹配关翎,也就是匹配盡可能多的字符扛门。
非貪婪匹配(也就是盡可能少匹配)
????????加個(gè)?就可以讓\d+采用非貪婪匹配
全局搜索
最常用的是g,表示全局匹配
? ? 例如:
? ??????????/test/g
? ? ? ? 注:全局匹配類似搜索纵寝,因此不能使用/^...$/论寨,那樣只會(huì)最多匹配一次
正則表達(dá)式還可以指定i標(biāo)志,表示忽略大小寫爽茴,m標(biāo)志葬凳,表示執(zhí)行多行匹配
如果你經(jīng)常遇到正則表達(dá)式的問題,你可能需要一本正則表達(dá)式的參考書室奏。
\033[##m