最近 寫一個項目 用到了 正則表達式 整理了一下

1.2正則表達式
正則表達式由有普通字符和一些元字符(具有特定含義的字符)組成。
腳下留心:正則表達式是表達式,不是一門語言,既然是表達式既可以運行在客戶端也可以運行在服務器端,而且跨語言跨平臺。
正則表達式區(qū)分大小寫

1.3中括號的應用
方括號中的字符屬于普通字符
1、[0-9a-zA-Z_]:字母、數(shù)字、下劃線
2、[c-f]:c到f的任意字符

<script type="text/javascript">
    var str='鋤禾日當午';
    var patten=/禾/;     //則表達式必須放在//之間
    var info=str.match(patten);  
    console.log(info);      // ["禾", index: 1, input: "鋤禾日當午"]
    if(info!=null){
        console.log(info[0]);
    }
</script>
match:用來匹配字符串,沒有找到匹配返回null,找到匹配返回一個數(shù)組

注意:正則表達式必須放在/ 正則表達式 /之間

<script type="text/javascript">
    var str='Hello';
    var array=str.match(/[d-n]/);
    console.log(array); //  ["e", index: 1, input: "Hello"]
    console.log(array[0]);  //e
</script>

1.4量詞
量詞用來指定字符出現(xiàn)的次數(shù)
字符 含義

  • 字符出現(xiàn)的次數(shù)>=1
  • =0
    ? =0或=1
    {n} 字符出現(xiàn)n次
    {n,m} 字符出現(xiàn)的次數(shù)>=n并且<=m
    {n,} 字符出現(xiàn)的次數(shù)>=n

<script type="text/javascript">
    var stu=['tm','tom','toom','tam'];
    for(var s in stu){
        //console.log(stu[s].match(/to+m/));    //tom  toom
        //console.log(stu[s].match(/to*m/));    //tm tom toom
        //console.log(stu[s].match(/to?m/));        //tm tom
        //console.log(stu[s].match(/to{2,3}m/));    //toom
        console.log(stu[s].match(/to{1,}m/));       //tom,toom
    }
</script>

1.5元字符
字符 含義
() 作用一:將多個字符組成一組
作用二:模式單元(提取匹配數(shù)據(jù))
[] 定義字符集合
{} 定義字符重復的次數(shù)

  • 字符出現(xiàn)的次數(shù)>=1
  • =0
    ? =0或=1
    ^ 表示匹配開始
    $ 表示結(jié)束
    . 代表任意字符
    \ 轉(zhuǎn)義字符
    | 或者

例題:小括號,將小括號中字符串作為一個整體

<script type="text/javascript">
    var str='aabbb';
    var info=str.match(/(ab)+/);
    console.log(info[0]);
</script>

例題:^和$

<script type="text/javascript">
    var str='abcde';
    //var info=str.match(/^bc/);    //必須是b開頭
    //var info=str.match(/de$/);        //必須的e結(jié)尾
    var info=str.match(/^a[a-z]+e$/);       //以a開頭,e結(jié)尾
    console.log(info);
</script>

例題:.代表任意字符,\表示轉(zhuǎn)義

image.png

例題:或

<script type="text/javascript">
    var stu=['tam','tom','tan','toe','taam','taom','toom'];
    for(var s in stu){
        var info=stu[s].match(/^t[a|o]+m$/);
        console.log(info);  //tam tom taam taom toom
    }
</script>

關于元字符的練習

<script type="text/javascript">
    //--------------練習一---------
    var array=['apple','banana','orange','tom'];
    for(var a in array){
        if(array[a].match(/apple|orange/)){
            console.log(array[a]);  //apple、orange
        }
    }
    //-------------練習二---------
    var email=['aa','aa@aa.com','bb@bb.com.cn'];
    for(var e in email){
        if(email[e].match(/.+@.+\..+/)){
            console.log(email[e]);  //aa@aa.com  bb@bb.com.cn
        }
    }
    //------------練習三---------
    var str=['ab','abab','ababab','ac'];
    for(var s in str){
        if(str[s].match(/(ab)+/)){
            console.log(str[s]);    //ab abab ababab
        }
    }
    //----------練習四---------------
    var emp=['tom','otoom','tooooomo','otooomo'];
    for(var e in emp){
        if(emp[e].match(/to*m/)){
            console.log(emp[e]);    //全部滿足
        }
    }

    for(var e in emp){
        if(emp[e].match(/^to*m$/)){
            console.log(emp[e]);    //tom
        }
    }
</script>

1.6模式修正符
i 忽略區(qū)分大小寫
g: 全局匹配

image.png

1.7模式單元
模式單元用于將匹配的數(shù)據(jù)提取出來

image.png

用于做爬蟲技術(shù)(數(shù)據(jù)采集)

<?php
//---采集誓婚網(wǎng)的數(shù)據(jù)
$str=file_get_contents('http://www.shihun1314.com');
$pattern='/<div class="home_index_part1_1 body">(.+)<\/div>/';
preg_match($pattern, $str,$info);
echo ($info[1]);
?>

1.7.1模式單元的重復匹配
模式單元的重復匹配是從1開始, \1表示第一個模式單元 \2表示第二個模式單元

<script type="text/javascript">
    var str='2015-12-12 12:09:12';
    //var reg=/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/;
    //var reg=/[0-9]{4}-([0-9]{2})-\1 \1:\1:\1/;  //\1 表示和第一個模式單元一樣
    //var reg=/[0-9]{4}(-[0-9]{2})\1 [0-9]{2}(:[0-9]{2})\2/;
    var reg=/[0-9]{4}(-[0-9]{2}){2} [0-9]{2}(:[0-9]{2}){2}/;
    console.log(str.match(reg));
</script>

1.7.2模式單元括號的索引
如果沒有括號的嵌套,從左往右計數(shù)
如果有括號嵌套,從外向里計數(shù)。

image.png

1.8字符簇
字符簇 含義
\d 數(shù)字
\D 非數(shù)字
\w 字母、數(shù)字、下劃線
\W 非字母、數(shù)字、下劃線
\s 空白字符
\S 非空白字符
\b 單詞的邊界
\B 非單詞邊界
例題

<script type="text/javascript">
    var str='我的電話是123456789';
    console.log(str.match(/(\d+)/));    //取出字符串中的數(shù)字 123456789 
    console.log(str.match(/\D+/));      //取出字符串中非數(shù)字

    str='鋤  禾  日 當 午';
    console.log(str);
    console.log(str.replace(/\s/g,'')); //替換所有的空白字符
    console.log(str.match(/\S/g));      //["鋤", "禾", "日", "當", "午"]

    str='我的學號是Stu_001';
    console.log(str.match(/\w+/));      //Stu_001
    console.log(str.match(/\W+/));      //我的學號是

    str='this is a girl';
    console.log(str.replace(/\bis\b/,'isn\'t')); //this isn't a girl
    console.log(str.replace(/\Bis\b/,'at'));    // that is a girl

    str='sunjing010@sina.com.cn.cn';
    if(/^\w+@\w+\.\w+(\.\w+)?$/.test(str))
        alert('成功');
    else
        alert('失敗');
</script>

1.9脫字符
脫字符表示不在某個范圍里面

image.png

1.10正向預查
在用正則表達式匹配數(shù)據(jù)的時候,取出的數(shù)據(jù)可能還不是我們想要的數(shù)據(jù),我們需要通過輔助條件再次進行篩選。
正向預查就是輔助條件在查詢表達式的右邊。
1.10.1正向匹配
語法:patten(?=模式)
patten:是正則表達式的匹配內(nèi)容
小括號中是輔助條件,輔助條件在正則表達式右邊

<script type="text/javascript">
    var stu=['stu001','teacher001','emp002','work0030'];
    for(var s in stu){
        var array=stu[s].match(/[a-z]+(?=\d{3}$)/);
        if(array!=null)
            console.log(array[0]);  //stu  teacher emp
    }
</script>

1.10.2正向不匹配
語法:patten(?!模式)

<script type="text/javascript">
var stu=['stu_001','teacher_002','emp_b','work_a'];
for(var s in stu){
    var info=stu[s].match(/([a-z]+)_(?!\d+)/);
    if(info){
        console.log(info[1]);   // emp  work
    }
}
</script>

1.11反向預查
輔助條件在正則表達式左邊
腳下留心:js不支持,PHP支持
1.11.1反向匹配
語法:(?<=模式)patten

image.png

文章內(nèi)容 都是 個人收集整理,修改過后的。

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

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