.(點好): 匹配除了換行符和其餘Unicode行終止符(如回車符)以外的任意字符,等價於[^\n\r] \w: 匹配任何ASII單字字符,等價於[a-zA-Z0-9_] \W: 匹配任何非ASII單字字符,等價於[^a-zA-Z0-9_] \s: 匹配任何Unicode空白符,等價於[\t\n\x0B\f\r]
概念:如星號(*)元字符在執行匹配時,先看整個字符串是否匹配,若是不匹配則去掉該字符串中的最後一個字符,並再次嘗試。html
1.?、{n}和{n,m}重複類正則表達式
這三個都具備弱貪婪性,主要表如今貪婪性具備有限性。對於?匹配,在選擇匹配仍是不匹配時,若是條件容許,它老是會選擇匹配而不是不匹配;{n,m}在條件容許的狀況下,匹配m次,而不是n次。 正則式的貪婪性是在遵循匹配條件基礎上儘量佔有更多的字符,而不是隨意佔用。
2.*、+和{n,}重複類算法
這三個具備強貪婪性,這種貪婪表現爲貪婪的無限性
星號(*)重複類的匹配底線是最寬容的,匹配慾望是最強烈的。不論是否存在指定字符或子表達式都會執行匹配操做數組
加號(+)重複類的匹配底線是最少存在一個符合指定條件的字符或子表達式,不然不予執行匹配操做瀏覽器
{n,}重複類的匹配底線是最靈活的,執行任意底線和條件的無限貪婪的匹配操做。spa
正則表達式是有貪婪性的,它老是與最長的長度匹配,並且越是排在左側的重複類匹配符優先級就越高。code
var s = "<html><head><title></title></head><body></body></html>"; var r = /(<.*>)(<.*>)/ var a = s.match(r); alert(a[1])//<html><head><title></title></head><body></body> alert(a[2])//</html>
上面的演示說明,當多個重複類並列子在一塊兒時,左側重複類具備較大的優先權,並儘量的佔有更多的符合條件的字符。htm
惰性匹配它將先查看字符串中的第一個字符是否匹配,若是匹配條件不夠,就讀入下一個字符。若是仍是匹配不足夠,惰性匹配會繼續從字符串中讀取字符串直到發現匹配或者整個字符串都檢查過也沒有匹配爲止。惰性匹配只須要在重複類後面添加問號(?)就能夠了。問號必須放在重複字符串後面。
貪婪匹配體現了最大化匹配原則,那麼惰性匹配體現了最小化匹配原則。但不論是那種匹配都必須保證匹配知足正則表達式基本條件。圖片
{n,m}?: 正則表達式儘可能匹配n次,可是爲了知足匹配條件也可能最多重複m次ip
{n}?: 正則表達式儘可能匹配n次;
{n,}?: 儘可能匹配n次,但爲了知足匹配條件也可能匹配任意次
??: 正則表達式儘可能匹配,可是爲了知足匹配條件也可能屢次匹配1次,至關於{0,1}?
+?: 儘可能匹配1次,可是爲了知足匹配條件也可能匹配任意次數,至關於{1,}?
*?:至關於{0,}?
這個是另外一種類型的匹配模式,它的算法是:只匹配整個字符串。若是整個字符串不能匹配,則會自動放棄匹配,再也不執行迭代以求進一步嘗試。支配匹配只須要在重複類後面添加加號(+)便可。
1.分組:就是經過用小括號來包含一系列字符、字符類,或者重複類量詞,以實現處理各類特殊的字符序列
經過小括號邏輯分隔符,實現分別儲存每一個被匹配的標籤,最後經過這個數組類獲取每一個標籤的名稱。小括號表示一個獨立的邏輯域,其匹配的內容將被獨立存儲。
分組的應用價值
把單獨的項目進行分組,以便合成子表達式,這樣就能夠像處理yi個獨立的字符那樣,使用|、+、*或?等字符來處理他們。
在正則表達式中,經過分組能夠在一個完整的模式中定義子模式。當一個正在表達式成功地與目標字符串匹配時,也能夠從目標字符串中抽出與小括號中的子模式相匹配的部分。
var s = "ab=21,bc=45,cd=43"; var r = /(\w+)=(\d+)/; var a = s.match(r); ["ab=21","ab","21"]
在同一個正則表達式的後部分能夠引用前面的子表達式。這是經過在字符「」後加一位或多位數字實現的。數字指定了帶括號的子表達式在正則表達式中的位置
var s = "<h1>title</h1><p>text</p>" var r = /(<\/?\w+>).*\1/g; var a = s.match(r);//["<h1>title</h1>","<p>text</p>"]
正則表達式分組會佔用必定的系統資源,在較長的正則表達式中,存儲反向引用會下降匹配速度。建立非引用型分組的方法是,在括號的後面分別加上一個問號和冒號。(?:w*?)
正則表達式用來聲明正則表達式在什麼條件下才能匹配,或者不在什麼條件下才會匹配,這種聲明包括正前向聲明和反向前聲明兩種模式
正前向聲明是指匹配模式後面的字符,聲明表示條件的意思,也是指定在接下來的字符必須被匹配,但並不真正進行匹配。通俗的講,就是指定可能執行匹配操做的條件,該條件做爲正則表達式的匹配模式一部分而存在,可是不會真正使用該條件去執行匹配。
var s = "a:123 b=345"; var r = /\w*(?==)/; var a = s.match(r);//["b"]
反前向聲明,就是指定接下來的字符都沒必要匹配,反前向聲明使用「(?!匹配條件)」來表示
var s = "a:123 b=345"; var r = /\w*(?!=)/; var a = s.match(r);//['a']
var s = "JavaScript, not Javascript"; var r = /(Java)Script/gi; var a = r.exec(s); RegExp.input//"JavaScript, not Javascript" RegExp.leftContext//空字符串 RegExp.rightContext//", not Javascript" RegExp.lastMatch//"JavaScript" RegExp.lastParen//"Java"