正則表達式(javascript)

javascript正則表達式

字符匹配

  1. 常見匹配字符的元字符:javascript

    • .匹配除換行符之外的任意字符。
    • \w匹配字母或數字或下劃線或漢字。
    • \s匹配任意的空白符。
    • \d匹配數字。
    • \W匹配任意不是字母,數字,下劃線,漢字的字符。
    • \S匹配任意不是空白符的字符。
    • \D匹配任意非數字的字符。
  2. [0-9][^abc]也都匹配一個字符。

位置匹配

  1. 除了匹配單個字符,還能夠匹配位置。元字符^和$都匹配一個位置。
  2. 常見匹配位置的元字符:html

    • \b匹配單詞的開始或結束。
    • ^匹配字符串的開始。
    • $匹配字符串的結束。
    • \B匹配不是單詞開頭或結束的位置。
  3. 如下列字符串("abc def")爲例:java

    • ^能夠匹配到位置0,該位置位於字符串開頭。
    • $能夠匹配到位置7,該位置位於字符串結尾。
    • \b能夠匹配到位置0、位置三、位置四、位置7,這些位置位於單詞開始或結束處。

image.png

分組

  1. ()經過小括號分組匹配多個字符。(abc)匹配abc三個字符。

重複匹配

  1. 限定符:正則表達式

    • *重複零次或更屢次。
    • +重複一次或更屢次。
    • ?重複零次或一次。
    • {n}重複n次。
    • {n,}重複n次或更屢次。
    • {n,m}重複n到m次。
  2. 重複單個字符。.+,[0-9]*
  3. 重複多個字符。(abc){2, 5}
  4. 默認的貪婪模式,儘量多的匹配。例如,正則1.*3全局查找字符串12313,匹配結果爲12313
  5. 限定符後面添加?,則匹配模式爲非貪婪模式,儘量少的匹配。例如,正則1.*3全局查找字符串12313,匹配結果爲12313

條件匹配

1.(a|b)匹配包含ab的字符。
2.abc|def匹配包含abcdef的字符。
3.^abc|def$匹配abc開頭或者def結尾的字符。
4.^(abc|def)$只匹配abcdef這兩個字符。spa

引用

  1. ()指定子表達式後,匹配子表達式的文本(分組捕獲的內容)能夠在表達式或其它程序中做進一步的處理。
  2. 默認狀況下,每一個分組會自動擁有一個組號,規則是:從左向右,以分組的左括號爲標誌,第一個出現的分組的組號爲1,第二個爲2。
  3. '<html></html>'.match(/<(.+?)><\/\1>/)\1表明分組1匹配的文本。
  4. (?<Name>)指定子表達式的組名(Name),\k<Name>引用捕獲的內容。
  5. '<html></html>'.match(/<(?<tag>.+?)><\/\k<tag>>/)組名爲tag。

零寬度斷言

  1. 和b,^,$相同,屬於位置匹配,這個位置應該知足必定的條件。
  2. (?=exp)零寬度正預測先行斷言,匹配的位置後面須要知足exp條件。好比\b\w+(?=ion\b),匹配誰後面有ion結尾,則查找position relative時,它會匹配posit
  3. (?<=exp)零寬度正回顧後發斷言,匹配的位置前面須要知足exp條件。好比(?<=\bun)\w+\b,匹配誰前面有un開頭,則查找see unreal時,它匹配real
  4. (?!exp)零寬度負預測先行斷言,匹配的位置後面不知足exp條件。好比\abc(?!\d)匹配後面沒有數字的abc,則查找abc1 abcd時,它匹配是後面的abc
  5. (?<!exp)零寬度正回顧後發斷言,匹配的位置前面不知足exp條件。好比\(?<!\d)abc匹配前面沒有數字的abc,則查找abc 1abc時,它匹配是前面的abc
  6. 12(?!\d)全局匹配下列字符串的過程:code

    • 正則表達式的字符"1"獲取控制權,開始配置字符,從第1個字符開始匹配,匹配字符"1"成功,而後控制權轉交給"2",從第2個字符繼續匹配,匹配成功,而後控制權轉交給(?!\d),它從位置2開始匹配,要求位置後面不是數字,匹配成功。
    • 此時獲得了第一個匹配結果,繼續查找其餘匹配結果。
    • 字符"1"從新獲取控制權,從第3個字符開始匹配,匹配失敗。
    • 字符"1"從新得到控制權,從第4個字符開始匹配,匹配成功,控制權轉交給"2",從第5個字符繼續匹配,匹配成功,而後控制權轉交給(?!\d),匹配位置5,要求位置後面不是數字,而該位置後面是數字,匹配失敗。
    • 字符"1"從新獲取控制權,返回到第5個字符開始匹配,匹配失敗。
    • 字符"1"從新獲取控制權,從第6個字符開始匹配,匹配成功,控制權轉交給字符"2",從第7個字符繼續匹配,匹配成功,而後控制全交給(?!\d),匹配位置7,該位置後面不是數字,匹配成功。
    • 此時獲得了第二個匹配結果,整個字符串也查找結束。
    • 最終配置的結果就是該字符串先後的12,不匹配中間的12

image0.png

'12a1212'.match(/12(?!\d)/g)
// ["12", "12"]
相關文章
相關標籤/搜索