正則練習

1, 判斷字符串是不是這樣組成的,第一個必須是字母,後面能夠是字母、數字、下劃線正則表達式

var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,9}$/;
var str = "abd_234__fDFS";
alert(reg.test(str));


匹配中文字符的正則表達式: [\u4e00-\u9fa5]
評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了

匹配雙字節字符(包括漢字在內):[^\x00-\xff]
評註:能夠用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

匹配空白行的正則表達式:\n\s*\r
評註:能夠用來刪除空白行

匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? />
評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的嵌套標記依舊無能爲力

匹配首尾空白字符的正則表達式:^\s*|\s*$
評註:能夠用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),很是有用的表達式

匹配Email地址的正則表達式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
評註:表單驗證時很實用code

匹配網址URL的正則表達式:[a-zA-z]+://[^\s]*
評註:網上流傳的版本功能頗有限,上面這個基本能夠知足需求遞歸

匹配字符字符串

. 匹配除換行符之外的任意字符
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
匹配位置io

\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
\G 上一個匹配的結尾(本次匹配開始)
\A 字符串開頭(相似^,但不受處理多行選項的影響)
\Z 字符串結尾或行尾(不受處理多行選項的影響)
\z 字符串結尾(相似$,但不受處理多行選項的影響)
重複test

  • 重複零次或更屢次
  • 重複一次或更屢次
    ? 重複零次或一次
    {n} 重複n次
    {n,} 重複n次或更屢次
    {n,m} 重複n到m次
    字符轉義

若是想匹配元字符自己或者正則中的一些特殊字符,使用\轉義。例如匹配*這個字符則使用*,匹配\這個字符,使用\。變量

須要轉義的字符:$, (, ), *, +, ., [, ], ?, \, ^, {, }, |表單

字符類表單驗證

當須要匹配明確的字符或字符集合時候,就用到字符類。引用

特殊字符

\0hh 8進制值hh所表示的字符
\xhh 16進制值hh所表示的字符
\uhhhh 16進制值hhhh所表示的Unicode字符
\t Tab
\n 換行符
\r 回車符
\f 換頁符
\e Escape
\cN ASCII控制字符。好比\cC表明Ctrl+C
\p{name} Unicode中命名爲name的字符類,例如\p{IsGreek}
陳列

[aeiou] 匹配一個元音字符
[.?!] 匹配給定的一個標點
範圍

[0-9] 匹配0~9的數字,同\d
[a-z] 匹配全部小寫字母
[a-zA-Z] 匹配全部字母
[a-z0-9A-Z_] 等同於\w
反義

表示不屬於元字符或者字符類的字符

反義元字符

\W 匹配任意不是字母,數字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數字的字符
\B 匹配不是單詞開頭或結束的位置
反義字符類

[^x] 匹配除了x之外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母之外的任意字符
分枝條件

又叫邏輯運算符,在此X和Y表示兩個表達式

XY X緊跟Y
X|Y 表示X或Y,從左到右,知足第一個條件就不會繼續匹配了。
分組

在這裏我把表達式統一以\w爲例:

(\w) 被一個括號包圍起來是一個總體,表示一個分組
(\w)(\w) 自動命名分組,第一個小括號是分組1,第二個小括號是分組2
(?'Word'\w+)) 表示定義了一個叫作Word的分組
(?\w+)) 表示定義了一個叫作Word的分組
(?:\w+) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號
後向引用

後面的表達式能夠引用前面的某個分組,用\1表示,就好像分組1的值賦值給了\1這個變量,這個變量能夠在後面任意位置引用。

\1 表示分組1匹配的文本
\k 表示分組Word匹配的文本
匹配重複兩個的英文,例如匹配Hello Hello、lei123 lei123:

(\w+)\s+\1
(?\w+)\s+\k
零寬斷言(正向和負向)

零寬斷言表示匹配字符的時候再添加一些定位條件,使匹配更精準。

\w+(?=ing) 匹配以ing結尾的多個字符(不包括ing)
\w+(?!ing) 匹配不是以ing結尾的多個字符
(?<=re)\w+ 匹配以re開頭的多個字符(不包括re)
(?<!re)\w+ 匹配不是以re開頭的多個字符
(?<=\s)\d+(?=\s) 匹配兩邊是空白符的數字,不包括空白符
貪婪與懶惰

貪婪:匹配儘量長的字符串

懶惰:匹配儘量短的字符串

懶惰模式的啓用只需在重複元字符以後加?既可。

*? 重複任意次,但儘量少重複
+? 重複1次或更屢次,但儘量少重複
?? 重複0次或1次,但儘量少重複
{n,m}? 重複n到m次,但儘量少重複
{n,}? 重複n次以上,但儘量少重複
處理選項

在表達式裏插記號的方式來啓用絕大多數的模式,在正則的哪裏插入,就從哪裏啓用。

(?i):忽略大小寫(CASE_INSENSITIVE)
(?x):忽略空格字符(COMMENTS)
(?s):.匹配任意字符,包括換行符(DOTALL)
(?m):多行模式(MULTILINE)
(?u):對Unicode符大小寫不敏感(UNICODE_CASE),必須啓用CASE_INSENSITIVE
(?d):只有'\n'才被認做一行的停止(UNIX_LINES)
平衡組/遞歸匹配

平衡組用於匹配嵌套層次結構,經常使用於匹配HTML標籤(當HTML內容不規範,起始標籤和結束標籤數量不一樣時,匹配出正確配對的標籤),在此把表達式統一以\w爲例。

(?'group'\w) 捕獲的分組(\w匹配到的內容)命名爲group,並壓入堆棧 (?'-group'\w) 捕獲分組(\w匹配到的內容)後,彈出group分組棧的棧頂內容(最後壓入的捕獲內容),堆棧原本爲空,則本分組的匹配失敗 (?(group)yes|no) 若是group棧非空匹配表達式yes,不然匹配表達式no (?!) 零寬負向先行斷言,因爲沒有後綴表達式,試圖匹配老是失敗

相關文章
相關標籤/搜索