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);

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

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

    // 方括號用于查找某個范圍內(nèi)的字符:

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


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

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

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

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

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

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

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

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

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

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

    // \S   查找非空白字符。
    console.log(/\S/.exec("Give 100%!"));
    // 結(jié)果:["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"));
    // 結(jié)果:["Wo", index: 6, input: "Hello World"]
    console.log(/\bor/.exec("Hello World"));
    // 結(jié)果:null

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

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


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

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

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

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

    // 量詞

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    // split    把字符串分割為字符串?dāng)?shù)組。
    console.log("Hello World! Football!".split(/o+/));
    // 結(jié)果:["Hell", " W", "rld! F", "tball!"]
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內(nèi)容

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