正則表達(dá)式RegExp

正則表達(dá)式在許多編程語言中都具有重要得作用,學(xué)會(huì)立正則表達(dá)式對編程處理數(shù)據(jù)具有事半功倍的作用

正則表達(dá)式得模式修飾符

  • 參數(shù) | 含義
    ---- | ---
    i | 忽略大小寫
    g | 全局匹配
    m | 多行匹配

1.兩種創(chuàng)建方式

var  box =   new RegExp("box","i");
var box =   /box/i;

2.RegExp對象的方法

  • 方法 | 功能
    ---- | ---
    exec | 一個(gè)在字符串中執(zhí)行查找匹配的RegExp方法,它返回一個(gè)數(shù)組(未匹配到則返回null)
    test | 一個(gè)在字符串中測試是否匹配的RegExp方法,它返回true或false坑填。
    match| 一個(gè)在字符串中執(zhí)行查找匹配的String方法,它返回一個(gè)數(shù)組或者在未匹配到時(shí)返回null函匕。
    search| 一個(gè)在字符串中測試匹配的String方法蚪黑,它返回匹配到的位置索引中剩,或者在失敗時(shí)返回-1。
    replace|一個(gè)在字符串中執(zhí)行查找匹配的String方法掠剑,并且使用替換字符串替換掉匹配到的子字符串郊愧。
    split| 一個(gè)使用正則表達(dá)式或者一個(gè)固定字符串分隔一個(gè)字符串井佑,并將分隔后的子字符串存儲(chǔ)到數(shù)組中的String方法

使用 new 運(yùn)算符的 test 方法示例

var pattern = new RegExp('box', 'i');
var str = 'This is a Box!';
alert(pattern.test(str));

使用字面量方式的 test 方法示例


var pattern = /box/i;
var str = 'This is a Box!';
alert(pattern.test(str));

使用一條語句實(shí)現(xiàn)正則匹配

alert(/box/i.test('This is a Box!')); //模式和字符串替換掉了兩個(gè)變量

使用 exec 返回匹配數(shù)組

var pattern = /box/i;
var str = 'This is a Box!';
alert(pattern.exec(str)); //匹配了返回?cái)?shù)組,否則返回 null

使用 match 方法獲取獲取匹配數(shù)組

var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.match(pattern));
alert(str.match(pattern).length);    //查找到返回位置,否則返回-1

PS:因?yàn)?search 方法查找到即返回,也就是說無需 g 全局

使用 search 來查找匹配數(shù)據(jù)

var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.search(pattern));

使用 replace 替換匹配到的數(shù)據(jù)

var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.replace(pattern, 'Tom'));   //將 Box 替換成了 Tom

使用 split 拆分成字符串?dāng)?shù)組

var pattern = / /ig;
var str = 'This is a Box!,That is a Box too';
alert(str.split(pattern));    //將空格拆開分組成數(shù)組

字符類

  • 元字符/元符號 | 匹配情況
    ---- | ---
    . | 匹配除換行符以外得任意字符
    [a-z0-9] |匹配括號中的字符集中得任意字符
    [^a-z0-9]| 匹配任意不在括號中的字符集中得字符
    \d|匹配數(shù)字
    \D|匹配非數(shù)字 === [^0-9]
    \w|匹配字母數(shù)字以及下劃線_
    \W|匹配非 字母數(shù)字以及以及下劃線_
    \o|匹配null字符
    \b|匹配空格字符
    \f|匹配進(jìn)制字符
    \n|匹配換行符
    \r|匹配回車字符
    \t|匹配制表符
    \s|匹配空白字符.空格躬翁。制表符和換行符
    \S| 匹配非 空白字符
    ^|行首匹配
    $|行尾匹配
    \A|只有匹配字符串開始處
    \b|匹配單詞邊界盯拱,單詞在[]內(nèi)時(shí)無效
    \B|匹配非單詞邊界
    \G| 匹配當(dāng)前搜索得開始位置
    \Z|匹配字符串結(jié)束處或行尾
    this| where|匹配this或者where得任意一個(gè)

  • 記錄符 | 匹配情況
    ---- | ---
    \1或者$1 |匹配第一個(gè)分組或者第一個(gè)分組內(nèi)得內(nèi)容
    \1或$1| 匹配第一個(gè)分組中得內(nèi)容
    ? | 匹配0個(gè)或一個(gè)

  • |匹配0個(gè)或任意多個(gè)
  • |匹配至少一個(gè)
    (xyz)+ |匹配至少一個(gè)(xyz)
    x{m,n} | 匹配至少m個(gè)X狡逢,最多n個(gè)X

貪婪與惰性 即是在貪婪匹配符后面加?號

  • 貪婪 | 惰性
    ---- | ---
  • | +?
    {n,m}| {n,m}?

使用點(diǎn)元字符

var pattern = /g..gle/;
var str = 'google';
alert(pattern.test(str));

重復(fù)匹配

var pattern = /g.*gle/;
var str = 'google';
alert(pattern.test(str));

使用字符類匹配

var pattern = /g[a-zA-Z_]*gle/;
var str = 'google';
alert(pattern.test(str));

使用錨元字符匹配

var pattern = /^google$/;
var str = 'google';
alert(pattern.test(str));

/^從開頭匹配,$從結(jié)尾開始匹配

var pattern = /goo\sgle/;
var str = 'goo gle';
alert(pattern.test(str)); //\s 可以匹配到空格
var pattern = /google\b/;
var str = 'google';
alert(pattern.test(str)); //\b 可以匹配是否到了邊界

使用或模式匹配

var pattern = /google|baidu|bing/;
var str = 'google';
alert(pattern.test(str));

使用分組模式匹配

var pattern = /(google){4,8}/;
var str = 'googlegoogle';
alert(pattern.test(str));    //匹配分組里的字符串 4-8 次
var pattern = /8(.*)8/;     //獲取 8..8 之間的任意字符
var str = 'This is 8google8';
str.match(pattern);
alert(RegExp.$1);           //獲取 8..8 之間的任意字符

貪婪

var pattern = /8(.*)8/;
var str = 'This is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>');  //得到替換的字符串輸出
document.write(result);
var pattern = /(.*)\s(.*)/;
var str = 'google baidu';
var result = str.replace(pattern, '$2 $1');  //將兩個(gè)分組的值替換輸出
document.write(result);

使用前瞻捕獲

var pattern = /(goo(?=gle))/;            //goo 后面必須跟著 gle 才能捕獲
var str = 'google';
alert(pattern.exec(str));

使用分組嵌套

var pattern = /(A?(B?(C?)))/;    //從外往內(nèi)獲取
var str = 'ABC';
alert(pattern.exec(str));  //abc,abc,bc,a

四.常用的正則
1.檢查郵政編碼

var pattern = /[1-9][0-9]{5}/;   //共 6 位數(shù)字,第一位不能為 0
var str = '224000';
alert(pattern.test(str));

2.檢查文件壓縮包

var pattern = /[\w]+\.zip|rar|gz/;    //\w 表示所有數(shù)字和字母加下劃線
var str = '123.zip';                 //\.表示匹配.,后面是一個(gè)選擇
alert(pattern.test(str));
//\w 表示所有數(shù)字和字母加下劃線
//\.表示匹配.,后面是一個(gè)選擇

3.刪除多余空格

var pattern = /\s/g;
var str = '111 222 333';
var result = str.replace(pattern,'');  //把空格匹配成無空格
alert(result);

4.刪除首尾空格

var pattern = /^\s+/;         //強(qiáng)制首
var str = 'goo gle '
var result = str.replace(pattern, '');
pattern = /\s+$/;            //強(qiáng)制尾
result = result.replace(pattern, '');
alert('|' + result + '|');

參考文檔
javascriptMDN
李炎恢javascript高級教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雀彼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子详羡,更是在濱河造成了極大的恐慌,老刑警劉巖实柠,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窒盐,死亡現(xiàn)場離奇詭異,居然都是意外死亡蟹漓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門份殿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗽交,“玉大人夫壁,你說我怎么就攤上這事。” “怎么了司蔬?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵姨蝴,是天一觀的道長。 經(jīng)常有香客問我吨些,道長炒辉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任偶器,我火速辦了婚禮缝裤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憋飞。我一直安慰自己,他們只是感情好唁盏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布厘擂。 她就那樣靜靜地躺著锰瘸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪避凝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天鹏氧,我揣著相機(jī)與錄音佩谣,去河邊找鬼实蓬。 笑死吊履,一個(gè)胖子當(dāng)著我的面吹牛调鬓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缀踪,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虹脯,長吁一口氣:“原來是場噩夢啊……” “哼循集!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起咒彤,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤镶柱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后歇拆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谐区,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年宋列,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了评也。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坤邪,死狀恐怖罚缕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤蚓聘,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布盟劫,位于F島的核電站,受9級特大地震影響塘装,放射性物質(zhì)發(fā)生泄漏影所。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一冗尤、第九天 我趴在偏房一處隱蔽的房頂上張望胀溺。 院中可真熱鬧,春花似錦仓坞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至壳繁,卻和暖如春荔棉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背润樱。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工壹若, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皂冰,地道東北人啊犬。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓壁查,卻偏偏與公主長得像,于是被迫代替她去往敵國和親语御。 傳聞我的和親對象是個(gè)殘疾皇子席怪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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