JavaScript RegExp 對象

require(['jquery'], function($) {

    // RegExp 對象
    // RegExp 對象表示正則表達式,它是對字符串執(zhí)行模式匹配的強大工具。
    // 直接量語法
    // /pattern/attributes
    // 創(chuàng)建 RegExp 對象的語法:
    var pattern = "[abc]";
    var attributes = "g";
    var myReg = new RegExp(pattern, attributes);

    // 參數 pattern 是一個字符串,指定了正則表達式的模式或其他正則表達式。
    // 參數 attributes 是一個可選的字符串,包含屬性 "g"、"i" 和 "m",分別用于指定全局匹配、區(qū)分大小寫的匹配和多行匹配。

    // 返回值
    // 一個新的 RegExp 對象,具有指定的模式和標志。如果參數 pattern 是正則表達式而不是字符串,那么 RegExp() 構造函數將用與指定的 RegExp 相同的模式和標志創(chuàng)建一個新的 RegExp 對象。
    // 如果不用 new 運算符,而將 RegExp() 作為函數調用,那么它的行為與用 new 運算符調用時一樣,只是當 pattern 是正則表達式時,它只返回 pattern,而不再創(chuàng)建一個新的 RegExp 對象。

    // 方括號用于查找某個范圍內的字符:

    // [abc]    查找方括號之間的任何字符。
    console.log(/[abc]/.test("abc"));
    // 結果:true
    console.log(/[abc]/.test("defg"));
    // 結果:false


    // [^abc]   查找任何不在方括號之間的字符。
    console.log(/[^abc]/.test("abc"));
    // 結果:false
    console.log(/[^abc]/.test("defg"));
    // 結果:true

    // [0-9]    查找任何從 0 至 9 的數字。
    console.log(/[0-9]/.test("a1b2c3"));
    // 結果:true
    console.log(/[0-9]/.test("abc"));
    // 結果:false

    // [a-z]    查找任何從小寫 a 到小寫 z 的字符。
    // [A-Z]    查找任何從大寫 A 到大寫 Z 的字符。
    // [A-z]    查找任何從大寫 A 到小寫 z 的字符。
    console.log(/[a-z]/.test("abc"));
    // 結果:true
    console.log(/[A-Z]/.test("abc"));
    // 結果:false
    console.log(/[A-z]/.test("abc"));
    // 結果:true

    // (red|blue|green) 查找任何指定的選項。
    var reg1 = new RegExp("blue|abl1");
    console.log(reg1.test("ablue"));
    // 結果:true
    console.log(reg1.test("abl1ue"));
    // 結果:true

    // 元字符(Metacharacter)是擁有特殊含義的字符:
    // .    查找單個字符,除了換行和行結束符。
    var reg2 = new RegExp("h.t");
    console.log(reg2.test("That's hot!"));
    // 結果:true (hat,hot都是)
    console.log(reg2.exec("That's hot!"));
    // 結果:["hat", index: 1, input: "That's hot!"] 查找第一個匹配,如果使用g屬性,就會指向最后一個匹配的["hot", index: 7, input: "That's hot!"]

    // \w   查找單詞字符。
    console.log(/\w/.exec("Give 100%!"));
    // 結果:["G", index: 0, input: "Give 100%!"]

    // \W   查找非單詞字符。
    console.log(/\W/.exec("Give 100%!"));
    // 結果:[" ", index: 4, input: "Give 100%!"]

    // \d   查找數字。
    console.log(/\d/.exec("Give 100%!"));
    // 結果:["1", index: 5, input: "Give 100%!"]

    // \D   查找非數字字符。
    console.log(/\D/.exec("Give 100%!"));
    // 結果:["G", index: 0, input: "Give 100%!"]

    // \s   查找空白字符。
    console.log(/\s/.exec("Give 100%!"));
    // 結果:[" ", index: 4, input: "Give 100%!"]

    // \S   查找非空白字符。
    console.log(/\S/.exec("Give 100%!"));
    // 結果:["G", index: 0, input: "Give 100%!"]

    // \b   匹配單詞邊界。在單詞邊界匹配的位置,單詞字符后面或前面不與另一個單詞字符直接相鄰
    // 如果未找到匹配,則返回 null。
    // /\bm/    匹配 "moon" 中的 'm';
    // /oo\b/   不匹配 "moon" 中的 'oo',因為 'oo' 后面的 'n' 是一個單詞字符;
    // /oon\b/  匹配 "moon" 中的 'oon',因為 'oon' 位于字符串的末端,后面沒有單詞字符;
    // /\w\b\w/ 不匹配任何字符,因為單詞字符之后絕不會同時緊跟著非單詞字符和單詞字符

    console.log(/\bWo/.exec("Hello World"));
    // 結果:["Wo", index: 6, input: "Hello World"]
    console.log(/\bor/.exec("Hello World"));
    // 結果:null

    // \B   匹配非單詞邊界。匹配位置的上一個和下一個字符的類型是相同的:即必須同時是單詞,或必須同時是非單詞字符。字符串的開頭和結尾處被視為非單詞字符。

    console.log(/\BWo/.exec("Hello World"));
    // 結果:null
    console.log(/\Bor/.exec("Hello World"));
    // 結果:["or", index: 7, input: "Hello World"]l


    // \n   查找換行符。
    console.log(/\n/.exec("Hello World.\nLearn Javascript."));

    // \f   查找換頁符。
    // \r   查找回車符。
    // \t   查找制表符。
    // \v   查找垂直制表符。

    // \xxx 查找以八進制數 xxx 規(guī)定的字符。
    // 八進制 127 (W)
    console.log(/\127/.exec("Hello World.World is wonderful!"));
    // 結果:["W", index: 6, input: "Hello World.World is wonderful!"]

    // \xdd 查找以十六進制數 dd 規(guī)定的字符。
    // \uxxxx   查找以十六進制數 xxxx 規(guī)定的 Unicode 字符

    // 量詞

    // n+   匹配任何包含至少一個 n 的字符串。
    console.log(/o+/.exec("Hello World.World is wonderful!"));
    // 結果:["o", index: 4, input: "Hello World.World is wonderful!"]

    // n*   匹配任何包含零個或多個 n 的字符串。
    console.log(/Wo*/.exec("Hello World.World is wonderful!"));
    // 對 "W" 進行全局搜索,包括其后緊跟的一個或多個 "o":
    // 結果:["", index: 0, input: "Hello World.World is wonderful!"]

    // n?   匹配任何包含零個或一個 n 的字符串。
    console.log(/10?/.exec("1, 100 or 1000?"));
    // 結果:["1", index: 0, input: "1, 100 or 1000?"] (1,10,10)都符合

    // n{X} 匹配包含 X 個 n 的序列的字符串。
    console.log(/\d{4}/.exec("100, 1000 or 10000?"));
    // 結果:["1000", index: 5, input: "100, 1000 or 10000?"] //查找四個數字,有兩個匹配1000和10000里的1000

    // n{X,Y}   匹配包含 X 或 Y 個 n 的序列的字符串。
    console.log(/\d{3,4}/.exec("100, 1000 or 10000?"));
    // 結果:["100", index: 0, input: "100, 1000 or 10000?"] //查找三個數字或四個數字,有三個匹配100,1000和10000里的1000

    // n{X,}    匹配包含至少 X 個 n 的序列的字符串。
    console.log(/\d{3,}/.exec("10, 100, 1000 or 10000?"));
    // 結果:["100", index: 4, input: "10, 100, 1000 or 10000?"] //查找三個數字或三個以上個數字,有三個匹配100,1000和10000里的1000

    // n$   匹配任何結尾為 n 的字符串。
    console.log(/d!$/.exec("Hello World!"));
    // 結果:["d!", index: 10, input: "Hello World!"]

    // ^n   匹配任何開頭為 n 的字符串。
    console.log(/^He/.exec("Hello World!"));
    // 結果:["He", index: 0, input: "Hello World!"]

    // ?=n  匹配任何其后緊接指定字符串 n 的字符串。
    console.log(/llo(?= Wor)/.exec("Hello World!"));
    // 結果:["llo", index: 2, input: "Hello World!"]

    // ?!n  匹配任何其后沒有緊接指定字符串 n 的字符串。
    console.log(/llo(!= Wor)/.exec("Hello World!"));
    // 結果:null

    // RegExp 對象方法
    // exec 檢索字符串中指定的值。返回找到的值,并確定其位置。   
    console.log(/[1-9]/.exec("a1b2"));
    // 結果:["1", index: 1, input: "a1b2"]

    // test 檢索字符串中指定的值。返回 true 或 false。
    console.log(/[1-9]/.test("a1b2"));
    // 結果:true

    // 支持正則表達式的 String 對象的方法
    // search   檢索與正則表達式相匹配的值。
    console.log("Hello World!".search(/d!$/));
    // 結果:10

    // match    找到一個或多個正則表達式的匹配。
    console.log("Hello World!".match(/d!$/));
    // 結果:["d!", index: 10, input: "Hello World!"]

    // replace  替換與正則表達式匹配的子串。
    console.log("Hello World!".replace(/d!$/, "kkk"));

    // split    把字符串分割為字符串數組。
    console.log("Hello World! Football!".split(/o+/));
    // 結果:["Hell", " W", "rld! F", "tball!"]
})
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 語法: 模式描述了一個表達式模型。 修飾符(modifiers)描述了檢索是否是全局,區(qū)分大小寫等。注意:當使用構...
    BaibaiWang閱讀 395評論 0 0
  • RegExp 對象表示正則表達式,它是對字符串執(zhí)行模式匹配的強大工具。 直接量語法:/pattern/attrib...
    JasonQiao閱讀 348評論 0 0
  • 小練習: \d \w \s [a-zA-Z0-9] \b . * + ? x{3} ^ $分別是什么? 寫一個函數...
    Sketch閱讀 258評論 0 0
  • RegEx 對象 RegExp 對象表示正則表達式,它是對字符串執(zhí)行模式匹配的強大工具。 直接量語法 /patte...
    OnlyLoveYu閱讀 226評論 0 0
  • RegExp 對象用于規(guī)定在文本中檢索的內容。 什么是 RegExp? RegExp 是正則表達式的縮寫。當您檢索...
    街角仰望閱讀 219評論 0 0

友情鏈接更多精彩內容