javascriptRegex介紹

來源:互聯網
上載者:User

標籤:

Regex就是一個用來描述字元模式的對象。它被用來在文本中執行模式比對(pattern-matching)以及”尋找-替換”(search-and-replace)的任務。javascript中正則的風格類似Perl中正則的風格。

建立

var reg = new RegExp(pattern,modifiers);

var reg = /pattern/modifiers;

modifiers包括

  • g : 執行全域匹配(尋找所有匹配而非在找到第一個匹配後停止)

    ‘Hey, Is this all there Is ‘.replace(/Is/g, ‘is‘);//替換某字串中所有的Is為is
  • i : 執行對大小寫不敏感的匹配
  • m : 執行多行匹配,具體見這裡
    ps 建立一正則時可多個模式,如 /hEllO/ig
正則相關方法
  • .test()。該方法對一個字串進行匹配。並根據匹配結果返回true或false。例如
    /e/.test(‘The best things in life are free‘); //true
  • .exec()。該方法將對一個字串進行匹配。並返回第一個匹配項目。例如:
    /e/.exec(‘The best things in life are free‘); // ["e"]

在字串方法中,有match方法,與exec類似。如

‘The best things in life are free‘.match(/e/); //["e"]
正則中的元字元

Regex中的元字元是用來替代一類具有相同屬性的字元的特殊字元,它也可以被稱為字元類(character class)。

  • . 尋找單個字元,除了換行和行結束符。
  • \w 尋找單詞字元(字母、數字以及底線”_”)。
  • \W 尋找非單詞字元。
  • \d 尋找數字。
  • \D 尋找非數字字元。
  • \s 尋找空白字元。
  • \S 尋找非空白字元。
  • \b 匹配單詞邊界。
  • \B 匹配非單詞邊界。
  • \0 尋找 NUL 字元。
  • \n 尋找分行符號。
  • \f 尋找換頁符。
  • \r 尋找斷行符號符。
  • \t 尋找定位字元。
  • \v 尋找垂直定位字元。
  • \xxx 尋找以八位元 xxx 規定的字元。
  • \xdd 尋找以十六進位數 dd 規定的字元。
  • \uxxxx 尋找以十六進位數 xxxx 規定的 Unicode 字元。
Regex中的括弧大括弧 ()

進行分組。好比email地址,我們就可以將它分為

  1. @前面的部分;
  2. @後面’.’之前的部分;
  3. ’.’之後的部分;
    如果要匹配所有gamil郵箱中@前的使用者名稱中帶有jack的替換為joel
    ‘[email protected]‘.replace(/^(\w*)(jack)(\w*)@gmail\.com$/, ‘[email protected]‘);  //"iamjo[email protected]"
    這種類似於模組化的思想,不僅使我們一次可以專註於尋找其中的一個小部分,也可以讓我們在後面可以輕鬆的替換其中的某個部分,而不需要糾結於“牽一髮而動全身”的痛苦。
方括弧 []

用於尋找某個範圍內的字元

  • [abc] 尋找方括弧之間的任何字元。
  • [^abc] 尋找任何不在方括弧之間的字元。
  • [0-9] 尋找任何從 0 至 9 的數字。
  • [a-z] 尋找任何從小寫 a 到小寫 z 的字元。
  • [A-Z] 尋找任何從大寫 A 到大寫 Z 的字元。
  • [A-z] 尋找任何從大寫 A 到小寫 z 的字元。
  • [adgk] 尋找方括弧內的任何字元。
  • [^adgk] 尋找不在方括弧內的任何字元。
量詞

匹配多個。如匹配3個數字可用正則/\d{3}/

  • n+ 匹配任何包含至少一個 n 的字串。
  • n* 匹配任何包含零個或多個 n 的字串。
  • n? 匹配任何包含零個或一個 n 的字串。
  • n{X} 匹配包含 X 個 n 的序列的字串。
  • n{X,Y} 匹配包含 X 或 Y 個 n 的序列的字串。
  • n{X,} 匹配包含至少 X 個 n 的序列的字串。
  • n$ 匹配任何結尾為 n 的字串。
  • ^n 匹配任何開頭為 n 的字串。
  • ?=n 匹配任何其後緊接指定字串 n 的字串。
  • ?!n 匹配任何其後沒有緊接指定字串 n 的字串。
習題
  1. 在字串”1.5 0 123 -7 -0.4”裡面匹配帶小數點的數,無論是正的還是負的。
  2. 在字串”1.5 0 123”中匹配數字([1.5,0,123]),無論是整數還是小數。
  3. 更多習題
進階貪婪和非貪婪模式

預設正則匹配是貪婪模式的,即前面的正則匹配儘可能多的。如

/(\d+)(\d+)/.exec(‘12345‘);//結果["12345", "1234", "5"]

開啟非貪婪模式,量詞後面加?

/(\d+?)(\d+)/.exec(‘12345‘);//結果["12345", "1", "2345"]

更詳細的的解釋,點這裡

非捕獲性分組

在括弧內容以?:開頭。如:

/(?:\d+)\d+/.exec(‘123‘);// 結果 ["123"]
匹配

Lookaround 是 向前匹配(Lookahead) 和 向後匹配(Lookbehind) 的統稱。
向前匹配

包括向前正向匹配(Positive Lookahead)和向前負向匹配(Negative Lookahead),文法是 ?= 和 ?!
前正向匹配:匹配任何其後緊接指定字串 n 的字串。
向前負向匹配:匹配任何其後沒有緊接指定字串 n 的字串。

類似的還有向後匹配。
在javascript目前只能使用 Lookahead,還無法使用 Lookbehind。

Lookaround 參考教程:http://www.regular-expressions.info/lookaround.html

正則拓展庫

xregexp特性

  1. 支援所有的ES5的正則的文法。
  2. 相容 Explorer 5.5+, Firefox 1.5+, Chrome, Safari 3+, and Opera 11+。在nodejs上也可以使用。
  3. 比原生正則可讀性高。
  4. 比原生正則易用。
更多資源
  • 正則簡明參考
參考
  • http://www.w3school.com.cn/js/jsref_obj_regexp.asp
  • http://www.html-js.com/article/A-day-to-learn-JavaScript-JavaScript-regular-expressions-a
  • http://javascript.info/tutorial/regular-expressions-javascript
  • https://github.com/lifesinger/lifesinger.github.com/issues/162#wechat_redirect
習題答案
  1. ‘1.5 0 123 -7 -0.4‘.match(/(-?\d+.\d+)/g)
  2. ‘1.5 0 123‘.match(/(\d+.?\d+)|0/g)
     推薦拓展閱讀

    javascriptRegex介紹

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.