一、什么是正則表達(dá)式
正則表達(dá)式是一種特殊的字符串模式,用于匹配一組字符串,就好比用模具做產(chǎn)品,而正則就是這個模具,定義一種規(guī)則去匹配符合規(guī)則的字符。
正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
說白了正則表達(dá)式就是處理字符串的,我們可以用它來處理一些復(fù)雜的字符串。
二、正則表達(dá)式規(guī)則
1.1 普通字符
字母、數(shù)字、漢字、下劃線、以及后邊章節(jié)中沒有特殊定義的標(biāo)點符號,都是"普通字符"。表達(dá)式中的普通字符,在匹配一個字符串的時候,匹配與之相同的一個字符。
舉例1:表達(dá)式 "c",在匹配字符串 "abcde" 時,匹配結(jié)果是:成功;匹配到的內(nèi)容是:"c";匹配到的位置是:開始于2,結(jié)束于3。(注:下標(biāo)從0開始還是從1開始,因當(dāng)前編程語言的不同而可能不同)
舉例2:表達(dá)式 "bcd",在匹配字符串 "abcde" 時,匹配結(jié)果是:成功;匹配到的內(nèi)容是:"bcd";匹配到的位置是:開始于1,結(jié)束于4。
三、正則表達(dá)式中的特殊字符
字符 含意
\ 做為轉(zhuǎn)意,即通常在"\"后面的字符不按原來意義解釋,如/b/匹配字符"b",當(dāng)b前面加了反斜桿后/\b/,轉(zhuǎn)意為匹配一個單詞的邊界。
-或-
對正則表達(dá)式功能字符的還原,如"*"匹配它前面元字符0次或多次,/a*/將匹配a,aa,aaa,加了"\"后,/a\*/將只匹配"a*"。
^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
$ 匹配一個輸入或一行的結(jié)尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/將匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/將匹配b,ba
(x) 匹配x保存x在名為$1...$9的變量中
x|y 匹配x或y
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配這個集合中的任一一個字符(或元字符)
[^xyz] 不匹配這個集合中的任何一個字符
[\b] 匹配一個退格符
\b 匹配一個單詞的邊界
\B 匹配一個單詞的非邊界
\cX 這兒,X是一個控制符,/\cM/匹配Ctrl-M
\d 匹配一個字?jǐn)?shù)字符,/\d/ = /[0-9]/
\D 匹配一個非字?jǐn)?shù)字符,/\D/ = /[^0-9]/
\n 匹配一個換行符
\r 匹配一個回車符
\s 匹配一個空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一個非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一個制表符
\v 匹配一個重直制表符
\w 匹配一個可以組成單詞的字符(alphanumeric,這是我的意譯,含數(shù)字),包括下劃線,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
\W 匹配一個不可以組成單詞的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
四、正則表達(dá)式基本語法
兩個特殊的符號'^'和'$'。他們的作用是分別指出一個字符串的開始和結(jié)束。
例子如下:
"^The":表示所有以"The"開始的字符串("There","The cat"等);
"of despair$":表示所以以"of despair"結(jié)尾的字符串;
"^abc$":表示開始和結(jié)尾都是"abc"的字符串——呵呵,只有"abc"自己了;
"notice":表示任何包含"notice"的字符串。
象最后那個例子,如果你不使用兩個特殊字符,你就在表示要查找的串在被查找串的任意部分——你并
不把它定位在某一個頂端。
其它還有'*','+'和'?'這三個符號,表示一個或一序列字符重復(fù)出現(xiàn)的次數(shù)。
它們分別表示“沒有或更多”,“一次或更多”還有“沒有或一次”。
下面是幾個例子:
"ab*":表示一個字符串有一個a后面跟著零個或若干個b。("a", "ab", "abbb",……);
"ab+":表示一個字符串有一個a后面跟著至少一個b或者更多;
"ab?":表示一個字符串有一個a后面跟著零個或者一個b;
"a?b+$":表示在字符串的末尾有零個或一個a跟著一個或幾個b。
你也可以使用范圍,用大括號括起,用以表示重復(fù)次數(shù)的范圍。
"ab{2}":表示一個字符串有一個a跟著2個b("abb");
"ab{2,}":表示一個字符串有一個a跟著至少2個b;
"ab{3,5}":表示一個字符串有一個a跟著3到5個b。
請注意,你必須指定范圍的下限(如:"{0,2}"而不是"{,2}")。
還有,你可能注意到了,'*','+'和'?'相當(dāng)于"{0,}","{1,}"和"{0,1}"。
還有一個'?',表示“或”操作:
"hi?hello":表示一個字符串里有"hi"或者"hello";
"(b?cd)ef":表示"bef"或"cdef";
"(a?b)*c":表示一串"a""b"混合的字符串后面跟一個"c";
'.'可以替代任何字符:
"a.[0-9]":表示一個字符串有一個"a"后面跟著一個任意字符和一個數(shù)字;
"^.{3}$":表示有任意三個字符的字符串(長度為3個字符);
方括號表示某些字符允許在一個字符串中的某一特定位置出現(xiàn):
"[ab]":表示一個字符串有一個"a"或"b"(相當(dāng)于"a?b");
"[a-d]":表示一個字符串包含小寫的'a'到'd'中的一個(相當(dāng)于"a?b?c?d"或者"[abcd]");
"^[a-zA-Z]":表示一個以字母開頭的字符串;
"[0-9]%":表示一個百分號前有一位的數(shù)字;
",[a-zA-Z0-9]$":表示一個字符串以一個逗號后面跟著一個字母或數(shù)字結(jié)束。
你也可以在方括號里用'^'表示不希望出現(xiàn)的字符,'^'應(yīng)在方括號里的第一位。
(如:"%[^a-zA-Z]%"表示兩個百分號中不應(yīng)該出現(xiàn)字母)。
為了逐字表達(dá),你必須在"^.$()?*+?{\"這些字符前加上轉(zhuǎn)移字符'\'。
請注意在方括號中,不需要轉(zhuǎn)義字符。
總結(jié)
其實只是對正則表達(dá)式不了解而以,了解了你就會發(fā)現(xiàn),原來就這樣啊正則表達(dá)式所用的相關(guān)字符其實不多,也不難記,更不難懂,唯一難的就是組合起來之后,可讀性比較差,而且不容易理解,本文旨在讓大家對正則有一個基本的了解,能看得懂簡單的正則表達(dá)式,寫得出簡單的正則表達(dá)式,用以滿足日常開發(fā)中的需求即可。
相關(guān)推薦:
js 常用正則表達(dá)式有哪些
JavaScript正則表達(dá)式視頻教程
javascript正則表達(dá)式的定義與介紹
怎么樣才能靈活使用JavaScript正則表達(dá)式
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com