面向?qū)ο螅ㄆ撸?-正則表達(dá)式

1.創(chuàng)建正則表達(dá)式的方法

1.1創(chuàng)建正則表達(dá)式的兩種方法

  1. 構(gòu)造函數(shù)

    • var regex=new RegExp(正則表達(dá)式[,匹配模式]);
  2. 字面量

    • var regex = /正則表達(dá)式/;

1.2使用正則表達(dá)式進(jìn)行匹配

正則對(duì)象.test( 字符串 ) -> bool

如果參數(shù)字符串中含有 復(fù)合 正則匹配的 子字符串, 就返回 true, 否則返回 false
代碼演示:

// 查詢一段文字中是否包含 itcast
    //         0123456789012345678901
    var str = 'qwertyuiopasdfghjklxcitcastvbnm,wertyuioqwsdfgbhnjmzxcfvghjuiko';
    // 要找 itcast, 因此正則表達(dá)式就可以使用 'itcast' 來表示
    // 1, 創(chuàng)建正則表達(dá)式對(duì)象
    var r1 = new RegExp( 'itcast' );
    var r2 = /itcast/;

    // 2, 開始檢查匹配
    var res = r2.test( str );

    console.log( res );



    // 使用傳統(tǒng)字符串操作
    var search = 'itcast'
    for ( var i = 0; i < str.length - search.length; i++ ) {
        // 判斷 str[ i ] 開始 的字符串是 itcast
        if ( search == str.substr( i, search.length ) ) {
            console.log( i ); 
            break;
        }
    }

1.3元字符

1.       .        查找單個(gè)字符,(除了換行和行結(jié)束符)
2.      ()       分組和提高優(yōu)先級(jí)
3.      []       表示一個(gè)字符
        用法:[abc]出現(xiàn)[]中任意一個(gè)字符
        可以匹配 a, b, c
4.      | (或)      或的功能   優(yōu)先級(jí)最低
-----------------------------------------------

擴(kuò)展:
    .        任意的一個(gè)字符银萍,沒有任何限制
    []       是出現(xiàn)在[]中的一個(gè)字符絮供。 認(rèn)為 . 的限制級(jí)版本
            [abc]:  a,b,或c
    |       可以認(rèn)為是允許使用多個(gè)字符的匹配

5.轉(zhuǎn)義字符:\
    表示點(diǎn):  \.
    表示[]:   \[     \]
    表示():   \(     \)
    表示\:    \\
    
5.限定元字符
    *            緊跟前面的一個(gè)字符或一組字符出現(xiàn)0次到多次
    +            緊跟在前面的字符出現(xiàn)1次到多次
    东囚?           緊跟在前面的字符出現(xiàn) 0次 或者 1次
    {數(shù)字}       緊跟在前面字符的出現(xiàn)指定次數(shù)
    {數(shù)字,}      緊跟在前面的字符至少出現(xiàn)的字符
    {數(shù)字椅野,數(shù)字}  緊跟在前面的字符出現(xiàn)的次數(shù)范圍幻捏。

1.4首尾正則表達(dá)式

^ 表示必須以 xxx 開頭
$ 表示必須以 xxx 結(jié)尾

  ^a 表示以a開頭的字符串
  
  b$ 表示以b結(jié)尾的字符串
 

1.5簡寫元字符


  \s   空白字符,包括空格肚邢,tab,回車換行等
  \S   非空白字符
  
  js中常使用[\s\S]表示任意字符
  
  \w   表示字符,包含數(shù)字拭卿,字母骡湖,下劃線
  \W   非字符
  \d   代表數(shù)字
  \D   非數(shù)字

1.6 exec 提取

使用正則表達(dá)式進(jìn)行匹配,使用exec 可以將匹配到的數(shù)據(jù)提取出來峻厚。

語法:

正則表達(dá)式 exp.exec(字符串)--> 封裝成數(shù)組

返回值:匹配到的表達(dá)式响蕴, 匹配子項(xiàng)

    // 案例: 在 'abc123def456ghij789klum' 提取數(shù)字

    var str = 'abc123def456ghij789klum';
    // 1> 全局模式
    var r = /\d+/g;

    // 2> 匹配要使用循環(huán)的方式
    var res;

   //可以循環(huán)匹配出所有的匹配項(xiàng)。
    while ( res = r.exec( str ) ) {
        console.log( res );
    }

注意:可以 (:惠桃?) 不捕獲子項(xiàng)浦夷。

1.7 反向引用

2> 與之匹配的標(biāo)簽名是什么?(反向引用)
        如果在一個(gè)正則表達(dá)式中使用組匹配到某一個(gè)數(shù)據(jù), 允許在該正則表達(dá)式中使用
        '\數(shù)字' 的方式引用該組

        <(\w+)>.*<\/\1>

1.8 貪婪模式

凡是在正則表達(dá)式中, 涉及到次數(shù)限定的, 一般默認(rèn)都是盡可能的多匹配.

取消貪婪模式. 在次數(shù)限定符后面加上 ?

注意: 貪婪模式性能會(huì)略高于非貪婪模式, 所以開發(fā)的時(shí)候. 一般不考慮貪婪的問題
只有代碼匹配結(jié)果出現(xiàn)問題了, 一般一次多匹配了, 才會(huì)取消貪婪辖试。

1.9 否定元字符

[^abc] 表示匹配除了a,b,c以外的字符。

1.10 replace方法

字符串.replace( 正則表達(dá)式, 字符串 ) -> 字符串

        1. 簡單替換
            'aaaaa-------bbbbbb------ccccc'.replace( /-+/, '-' )
            'aaaaa-------bbbbbb------ccccc'.replace( /-+/g, '-' )
        2. 分組替換
            可以在替換字符串中, 使用 $數(shù)字 來引用替換的數(shù)據(jù)

            'abc123'.replace( /(\d+)/, 'd$1' ) -> 'abcd123'

            '1991-1-1'
            中國: 1991年1月1日
            歐洲: 1/1/1991
            ... : 1991 1 1

            '1991-1-19'.replace( /(\d+)-(\d+)-(\d+)/, '$1年$2月$3日' )

    3> 函數(shù)參數(shù)用法(了解)
        語法:
            字符串.replace( 正則表達(dá)式, fn )

        '我的郵箱是:abc@itcast.cn, 你的郵箱是: defghijk@itcast.cn'
            .replace( /\w+@\w+(\.\w+)+/g, '*' );

        '我的郵箱是:abc@itcast.cn, 你的郵箱是: def@itcast.cn'
            .replace( /(\w+)@(\w+(\.\w+)+)/g, function ( s, g1, g2, g3 ) {
                return '*';
            } );

        // 要求 只顯示 第一個(gè)字符, 其余的都是用 * 表示
        '我的郵箱是:abc@itcast.cn, 你的郵箱是: defghijklim@itcast.cn'
            .replace( /(\w+)@(\w+(\.\w+)+)/g, function ( s, g1, g2, g3 ) {
                
                // 將用戶名 變成 a***** 的形式
                var first = g1.charAt( 0 );
                var start = [];
                for ( var i = 0; i < g1.length - 1; i++ ) {
                    start.push( '*' );
                }

                return first + start.join('') + '@' + g2;

            } );
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劈狐,一起剝皮案震驚了整個(gè)濱河市罐孝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肥缔,老刑警劉巖莲兢,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異续膳,居然都是意外死亡改艇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門姑宽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遣耍,“玉大人闺阱,你說我怎么就攤上這事炮车。” “怎么了酣溃?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瘦穆,是天一觀的道長。 經(jīng)常有香客問我赊豌,道長扛或,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任碘饼,我火速辦了婚禮熙兔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艾恼。我一直安慰自己住涉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布钠绍。 她就那樣靜靜地躺著舆声,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柳爽。 梳的紋絲不亂的頭發(fā)上媳握,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音磷脯,去河邊找鬼蛾找。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赵誓,可吹牛的內(nèi)容都是我干的腋粥。 我是一名探鬼主播晦雨,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼隘冲!你這毒婦竟也來了闹瞧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤展辞,失蹤者是張志新(化名)和其女友劉穎奥邮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罗珍,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洽腺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了覆旱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸朋。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扣唱,靈堂內(nèi)的尸體忽然破棺而出藕坯,到底是詐尸還是另有隱情,我是刑警寧澤噪沙,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布炼彪,位于F島的核電站,受9級(jí)特大地震影響正歼,放射性物質(zhì)發(fā)生泄漏辐马。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一局义、第九天 我趴在偏房一處隱蔽的房頂上張望喜爷。 院中可真熱鬧,春花似錦萄唇、人聲如沸檩帐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轿塔。三九已至,卻和暖如春仲墨,著一層夾襖步出監(jiān)牢的瞬間勾缭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工目养, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俩由,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓癌蚁,卻偏偏與公主長得像幻梯,于是被迫代替她去往敵國和親兜畸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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