正則表達式

//定義正則表達式的兩種方式,在用構(gòu)造函數(shù)的時候,有些地方是要加轉(zhuǎn)義字符的。

//1嗦枢、字面量攀芯。

var reg = /\bis\b/ig;

var str = "He is a good boy";

console.log(str.replace(reg, 'IS')); //He IS a good boy

//2屯断、構(gòu)造函數(shù)

var reg = new RegExp('\\bis\\b', 'ig'); //加了轉(zhuǎn)義字符

var str = "He is a good boy";

console.log(str.replace(reg, 'IS')); //He IS a good boy

//正則表達式由兩種基本字符類型組成:

//1.原義文本字符:代表其本身

//2.元字符:在正則表達式中有特殊含義的非字母字符

//字符類取反:^,注意:^符號只有在[]中才是取反的意思,在[]外面表示開頭

//例如

//var reg = /[^\d]/ig;

//var str = '123456dsa';

//str.replace(reg,'m');//123456mmm

//test()方法用于測試字符串是否符合正則表達式侣诺,默認(rèn)只要字符串中有一部分符合殖演,就返回true,不符合返回false年鸳。

//加上^和$表示str必須從頭到尾完全匹配規(guī)則趴久,否則就是false.^表示以xxx開始,$表示以XXX結(jié)束

//\b表示單詞邊界 \B表示非單詞邊界

// var reg = /abc/ig;

// var str = "abcd";

// reg.test(str);//true

//

//var reg = /^abc$/ig;

//var str = "abcd";

//reg.test(str);//false

//1. 備選字符集:規(guī)定某*一位*字符可選的備選文字列表

// 語法:[備選字符列表]

// 強調(diào):無論備選字符集中由有多少字符搔确,都必須且只能選1個,一個[]只代表1位字符彼棍!

// 比如:6位數(shù)字:[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]

//2. -:如果備選字符連續(xù),可用-表示"到"

//3. 預(yù)定義字符集:專門表示常用的連續(xù)的字符集

// \d ==>[0-9] : 1位數(shù)字

// \w ==>[0-9a-zA-Z_] : 1位數(shù)字膳算,字母或下劃線

// \s ==>[空字符] : 代表一位空字符:空格座硕,Tab符

//

var reg = /[abcdefg]/;

var str = "a";

console.log(reg.test(str)); //true

var reg = /[abcdefg]/;

var str = "abl";

console.log(reg.test(str)); //true,因為只匹配一個字符涕蜂,符合华匾,就返回true,不管后面是怎么樣的內(nèi)容机隙。

var reg = /[abcdefg]/;

var str = "lab";

console.log(reg.test(str)); //true蜘拉,同上

var reg = /^[abcdefg]$/g;

var str = "ab";

console.log(reg.test(str)); //false萨西,規(guī)則是只匹配一個字符,字符串中是兩個字符旭旭,所以false

var reg = /^[abcdefg]+$/g;

var str = "ab";

console.log(reg.test(str)); //true谎脯,規(guī)則中的含義是,匹配一個或多個小寫字母組成的字符串

// .:除了換行外持寄,其他所有的字符

//

// \D,\W,\S-->除了\d,\w或\s --了解

//4. 量詞:規(guī)定一個字符集出現(xiàn)的次數(shù):2種

// (1)明確數(shù)量:3種:{min,max}:最少min位穿肄,最多max位

// {min,}:至少min位

// {n}:必須n位

// 身份證號:15位或者18位

// 18位時后三位: 2位數(shù)字+最后一位數(shù)字或x X,后三位可有可無,但最多出現(xiàn)1次

// \d{15}(\d{2}[0-9xX])?

//

// (2)不確定數(shù)量:3種:

// ? ==>{0,1}: 可有可無际看,最多1次

// * ==>{0,}:可有可無咸产,多了數(shù)量不限

// + ==>{1,}:至少一次,多了數(shù)量不限

//g的作用仲闽,不加g的時候脑溢,雖然有兩個 is,但找到一個以后就停止匹配了赖欣,g是global的縮寫

//var reg = /is/;

//console.log(reg.global);//false

//var reg = /is/g;

//console.log(reg.global);//true

//最簡單的正則表達式

var str = "He is a good boy";

var reg = /is/;

console.log(str.replace(reg, 'IS')); //ThIS is a good boy

//這樣就會匹配出當(dāng)前字符串中所有的is

var reg1 = /is/g;

console.log(str.replace(reg1, 'IS')); //ThIS IS a good boy

//只匹配到小寫的is屑彻,i是ignoreCase的縮寫,加上i表示匹配是忽略大小寫

//var reg = /is/i;

//console.log(reg.ignoreCase);//true

var reg2 = /is/g;

var str = "This IS a good boy";

console.log(str.replace(reg2, 'o')); //Tho IS a good boy

var reg3 = /is/gi;

var str = "This IS a good boy";

console.log(str.replace(reg3, 'o')); //Tho o a good boy

//貪婪模式

var reg4 = /\d{3,6}/ig;

var str = "12345678";

console.log(str.replace(reg4, 'X')); //X78

//讓正則表達式盡可能少的匹配顶吮,也就是說一旦成功匹配不再繼續(xù)嘗試社牲,就是非貪婪模式,在量詞后面加上?即可

var reg5 = /\d{3,6}?/ig;

var str = "12345678";

console.log(str.replace(reg5, 'X')); //XX78

//前瞻:在正則表達式匹配到規(guī)則的時候悴了,向前檢查是否符合斷言茵肃,后顧/后瞻 方向相反

//正則表達式從文本頭部向尾部開始解析,文本尾部方向稱為"前"评抚,通俗的說谦秧,從頭開始,向尾部搜索搞莺,比喻成走路息罗,尾部就是前方了。

//要找的值滿足查詢附帶的條件才沧,例如迈喉,我要找你的哥哥。目標(biāo)是哥哥温圆,條件是你的哥哥挨摸。左面的5是哥哥,右邊的5是你

var str = "4d4d4d55";

var reg = /\d(?=\d)/ig; //

str.replace(reg, 'w'); //"4d4d4dw5"

//負(fù)向前瞻

var str = "4a4b4c55";

var reg = /\d(?!\d)/ig;

str.replace(reg, 'w'); //"wawbwc5w"

//用()括起來代表分組捌木,從左到右序號遞增油坝,對應(yīng)的變量的值$1,$2,.....$n,注意:只有在字符串滿足完整的正則表達式的前提下,才會匹配出子項澈圈。通俗的說彬檀,就是有了爸爸才能有兒子。

//反向引用

//match獲取當(dāng)前字符串中查詢到的所有符合正則的內(nèi)容瞬女,存放到一個數(shù)組中窍帝。

//exec 方法受參數(shù) g的影響。若指定了 g诽偷,則下次調(diào)用 exec 時坤学,會從上個匹配的 lastIndex 開始查找。lastIndex是當(dāng)前表達式匹配內(nèi)容的最后一個字符的下一個位置报慕。 exec每次只查詢字符串中一個符合正則表達式的內(nèi)容深浮,并返回其值和當(dāng)前值中的子項,存放在一個數(shù)組中眠冈。不指定g的時候飞苇,索引值不變,不管調(diào)用幾次蜗顽,查找的都是字符串中第一個符合正則的值布卡。

var str = "ma name is aa Aa aaa aa";

var reg = /aa/ig;

str.match(reg); //["aa", "Aa", "aa", "aa"]

reg.exec(str); //["aa"]

reg.exec(str); //["Aa"]

reg.exec(str); //["aa"]

reg.exec(str); //["aa"]

reg.exec(str); //null

reg.exec(str); //["aa"]

//test()方法exp.test(str);返回值為true和false,符合返回true雇盖,下次調(diào)用 test 時會從上個匹配的 lastIndex 開始查找忿等。

var str = "abcd";

var reg = /\w/ig;

reg.test(str); //true,第一個匹配的是a

reg.test(str); //true,第一個匹配的是b

reg.test(str); //true,第一個匹配的是c

reg.test(str); //true,第一個匹配的是d

reg.test(str); //false,未匹配到值

reg.test(str); //true,重新開始匹配a

//加了^$,所以當(dāng)前規(guī)則要求字符串完全符合正則表達式崔挖,恰好當(dāng)前字符串是符合的贸街,于是可以匹配出子項

var str = '2015-08-23';

var reg = /^(\d{4})-(\d{2})-(\d{2})$/ig;

str.replace(reg, '$1/$2/$3'); //2015/08/23

//再看這個,也 加了^$虚汛,要求字符串從頭到尾完全符合正則表達式匾浪,當(dāng)前字符串不符合皇帮,所以匹配不到任何值卷哩,也就沒有子項。沒有爸爸属拾,也就沒有兒子了将谊。

var str = 'a2015-08-23a';

var reg = /^(\d{4})-(\d{2})-(\d{2})$/ig;

reg.test(str); //false,也就會沒有匹配到任何值

str.replace(reg, '$1/$2/$3'); //"a2015-08-23a"

//去掉了^$,也就不需要字符串從頭到尾完全符合正則表達式渐白,于是就匹配到了值

var str = 'a2015-08-23a';

var reg = /(\d{4})-(\d{2})-(\d{2})/ig;

str.replace(reg, '$1/$2/$3'); //"a2015/08/23a"

//那么尊浓,我們需要證明一下它的子項有哪些,于是調(diào)用了exec函數(shù)纯衍,這個函數(shù)的作用是將匹配到的值和其中的子項放在一個數(shù)組里栋齿。

var str = 'a2015-08-23a';

var str = 'a2015-08-23a'; //["2015-08-23", "2015", "08", "23", index: 1, input: "a2015-08-23a"],這是匹配到的字符串和其子項

//于是,我們知道瓦堵,他的子項$1,$2,$3分別是exec[1],exec[2],exec[3]

str.replace(reg, '$1/$2/$3'); //"a2015/08/23a"

//用子項替換當(dāng)前字符串中匹配到的值(2015-08-23),也就是"a2015-08-23a"中基协,將"2015-08-23"替換為2015、08菇用、23澜驮,結(jié)果為

//"a2015/08/23a"

//如果不希望捕獲分組,那么惋鸥,可以再分組內(nèi)加上?:杂穷,像這樣(?:\d{4}),這樣,這個分組就不會被捕獲了卦绣。

var str = 'a2015-08-23a';

var reg = /(?:\d{4})-(\d{2})-(\d{2})/ig;

var match = str.match(reg);

console.log(match); //"2015-08-23"耐量,這樣,我們就得到了當(dāng)前匹配到的字符串滤港。

var exec = reg.exec(str);

console.log(exec); //["2015-08-23", "08", "23"]拴鸵,匹配到的字符串和其子項中,沒有匹配到"2015"這一子項

//他的子項$1,$2分別是exec[1],exec[2]蜗搔,也就是"08"和"23"

str.replace(reg, '$1/$2'); //"a08/23a"

//這時劲藐,如果這樣寫:

//str.replace(reg,'$1/$2$3');

//匹配到的是"a08/23$3a",因為$3并沒有值。

rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/

var str = ‘<html></html>’;

\1就是第一個子項的意思

// .代表所有字符

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末樟凄,一起剝皮案震驚了整個濱河市聘芜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缝龄,老刑警劉巖汰现,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叔壤,居然都是意外死亡瞎饲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門炼绘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗅战,“玉大人,你說我怎么就攤上這事俺亮⊥院矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵脚曾,是天一觀的道長东且。 經(jīng)常有香客問我,道長本讥,這世上最難降的妖魔是什么珊泳? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任鲁冯,我火速辦了婚禮,結(jié)果婚禮上色查,老公的妹妹穿的比我還像新娘晓褪。我一直安慰自己,他們只是感情好综慎,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布涣仿。 她就那樣靜靜地躺著,像睡著了一般示惊。 火紅的嫁衣襯著肌膚如雪好港。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天米罚,我揣著相機與錄音钧汹,去河邊找鬼。 笑死录择,一個胖子當(dāng)著我的面吹牛拔莱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隘竭,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼塘秦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了动看?” 一聲冷哼從身側(cè)響起尊剔,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菱皆,沒想到半個月后须误,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡仇轻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年京痢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篷店。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡祭椰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出船庇,到底是詐尸還是另有隱情吭产,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布鸭轮,位于F島的核電站,受9級特大地震影響橄霉,放射性物質(zhì)發(fā)生泄漏窃爷。R本人自食惡果不足惜邑蒋,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望按厘。 院中可真熱鬧医吊,春花似錦、人聲如沸逮京。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懒棉。三九已至草描,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間策严,已是汗流浹背穗慕。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妻导,地道東北人逛绵。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像倔韭,于是被迫代替她去往敵國和親术浪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

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

  • 1寿酌,正則表達式的作用:匹配一個字符串中的一些內(nèi)容 2添吗,聲明和使用: 1)構(gòu)造函數(shù) var reg=new RegE...
    WDL_1a39閱讀 732評論 0 1
  • 前言 作為一個程序員,要出去裝逼份名,手中必備的技能就是正則表達式碟联。程序員的正則表達式,醫(yī)生的處方和道士的鬼畫符僵腺,都是...
    Layzimo閱讀 550評論 0 6
  • 假設(shè)用戶需要在?HTML?表單中填寫姓名鲤孵、地址、出生日期等辰如。那么在將表單提交到服務(wù)器進一步處理前普监,JavaScri...
    結(jié)構(gòu)學(xué)AI閱讀 285評論 0 0
  • 一.當(dāng)孫悟空遇到荊軻 二.拼死也要靠近你——后羿與鐘無艷 三.我們都是紅塵中打滾的人——亞瑟與妲己 四.在我們的最...
    菱歌上下閱讀 209評論 0 2
  • 時光流轉(zhuǎn),歲月如梭琉兜。行走在大街上凯正,我不知道,這人來人往有幾個人是擦肩而過之后還能再見的豌蟋。我只想游走在晚上的街頭廊散,讓...
    向行閱讀 330評論 2 3