正則表達(dá)式筆記

正則表達(dá)式

正則表達(dá)式,又稱規(guī)則表達(dá)式。(英語(yǔ):Regular Expression癌椿,在代碼中常簡(jiǎn)寫為regex、regexp或RE)缓醋,計(jì)算機(jī)科學(xué)的一個(gè)概念如失。正則表通常被用來檢索、替換那些符合某個(gè)模式(規(guī)則)的文本送粱。正則并不是js所獨(dú)有的褪贵,他是獨(dú)立與任何語(yǔ)言之外的,很多的編程語(yǔ)言都支持使用正則規(guī)則對(duì)字符串進(jìn)行一些復(fù)雜的操作抗俄。

正則在js中是以對(duì)象的形式存在的脆丁,和日期對(duì)象,數(shù)組對(duì)象類似

創(chuàng)建正則對(duì)象的方式

  1. 傳統(tǒng): new RegExp()
  2. 簡(jiǎn)寫: //
var re1 = new RegExp('a'); //參數(shù)接收字符串动雹,字符串:正則規(guī)則的內(nèi)容
console.log(re1); /a/

var re2 = /a/;
console.log(re2); /a/

var re3 = /\d/;
console.log(re3); /\d/

*//如果使用傳統(tǒng)的方式來創(chuàng)建一個(gè)正則對(duì)象槽卫,那么字符串會(huì)被默認(rèn)先進(jìn)行解析,然后把解析后的字符串作為參數(shù)傳給正則對(duì)象
var re4 = new RegExp('\d')
console.log(re4); /d/
*//首先\d會(huì)被字符串解析成字符d胰蝠,然后在把解析后的d作為參數(shù);

var re5 = new RegExp('\\d');
console.log(re5); /\d/

var usename = 'zzaall';
*// 如果我們通過簡(jiǎn)寫的形式歼培,那么 // 中的字符是不會(huì)被js作為特殊數(shù)據(jù)解析的,比如變量茸塞,如果我們的正則中有通過變量來表示的內(nèi)容躲庄,那么簡(jiǎn)寫的方式就不適合了
var re6 = /usename/;
console.log(re6); /usename/

var re7 = new RegExp(username)
console.log(re7); /zzaall/
正則.test(字符串)

檢測(cè)參數(shù)字符串中是否包含有正則對(duì)象所匹配的內(nèi)容,如果有返回true,如果沒有就返回false

console.log(/\d/.test('abc1degfg')) //true

\d: 一個(gè)數(shù)字


字符串.search(字符串/正則)

查找參數(shù)的內(nèi)容在前面字符串中首次出現(xiàn)的位置钾虐,如果沒有返回-1.和indexOf很類似噪窘,但是他和indexOf有一個(gè)最大的區(qū)別是:indexOf參數(shù)只支持字符串,search還可以支持正則

console.log('abcde'.search('a')); 0
console.log('abcde'.search('b')); 1 

console.log('abcde'.search(/a/)); 0
console.log('a2bcde'.search(/\d/)); 1

console.log('bacds'.search(/A/i)); 1
console.log('bacds'.search( new RegExp('A', 'i') )); 1

i: ignore 忽略 大小寫

修飾符: 對(duì)正則表達(dá)式內(nèi)容的強(qiáng)調(diào)與說明


字符串.match(正則)

在前面的字符串中查找和參數(shù)匹配的內(nèi)容效扫,并保存到一個(gè)數(shù)組中返回

var str = 'j234hj2g42jh4j2k1';
console.log( str.match(/\d/) ); // 2 一個(gè)數(shù)組倔监,保存第一個(gè)數(shù)字出現(xiàn)
console.log( str.match(/\d/g) );// 2,3,4,2,4,2,4,2,1所有數(shù)字的數(shù)組

模式:

  • 懶惰: 如果使用懶惰模式進(jìn)行內(nèi)容匹配,那么當(dāng)找到一個(gè)匹配結(jié)果的時(shí)候菌仁,就終止繼續(xù)執(zhí)行
  • 非懶惰: g : global 全局查找浩习,修飾符
var str = 'j234hj2g42jh4j2k1';
console.log( str.match(/\d+/g) ); //234,2,42,4,2,1 

+: 表示+的前一個(gè)規(guī)則最少匹配一次,最多不限,量詞

模式:貪婪:當(dāng)一組結(jié)果中的內(nèi)容有多個(gè)滿足的時(shí)候掘托,正則會(huì)選擇最大化的結(jié)果作為最終結(jié)果


字符串.replace(要查找的內(nèi)容, 要替換的內(nèi)容)

在前面的字符串中查找第一個(gè)參數(shù)指定的內(nèi)容瘦锹,并用第二個(gè)參數(shù)的內(nèi)容進(jìn)行替換

console.log('asdasda'.replace('a','*')); //*sdasda

*/簡(jiǎn)單的字符串替換,只會(huì)替換一次,如果我們需要進(jìn)行一些更為復(fù)雜的查找和替換,那么就需要使用正則來進(jìn)行
console.log( 'asdasda'.replace(/a/gi, '*') ); //*sd*sd

replace

  • 第一個(gè)參數(shù):既可以接收普通的字符串弯院,也可以接收正則對(duì)象
  • 第二個(gè)參數(shù):既可以接收普通的字符串辱士,還可以接收一個(gè)函數(shù)(回調(diào))
敏感詞替換

//我們可以根據(jù)當(dāng)前這次匹配的內(nèi)容長(zhǎng)度來動(dòng)態(tài)的返回不同個(gè)數(shù)的*
var str = '西紅柿是紅色的';
var newStr = str.replace(/西紅柿|紅色/g,function(a){;
console.log(a); //西紅柿 紅色

var s = '';
for(var i = 0;i < a.lenfth;i++){
    s += '*'
}
return s;
});
console.log(newStr);
//***是**的
子項(xiàng)
var d1 = '2017-7-17';

function formatDate(str){
  return str.replace(/(\d+)\D+(\d+)\D+(\d+)/,function($0,$1,$2,$3){
    // 第一個(gè)參數(shù)($0):當(dāng)前整個(gè)正則所匹配的內(nèi)容,后面的參數(shù)是每個(gè)()里的內(nèi)容
    console.log($0); //2017-7-17
    console.log($1); //2017
    console.log($2); //7
    console.log($3); //17
    return $1 + '年' + $2 + '月' + $3 + '日';
  })
}
console.log(formatDate(d1));

\D: 一個(gè)非數(shù)字

(): 子項(xiàng)听绳; 范圍(提權(quán))颂碘,會(huì)在結(jié)果中保留(提供)子項(xiàng)當(dāng)前匹配的內(nèi)容

從左至右,從外至里 也可以 根據(jù) ( 出現(xiàn)的順序來

范圍選擇

    var str = 'a1ba2ba3baaba4b';

    //a開頭b結(jié)尾中間是數(shù)字 (a數(shù)字b)
    console.log(str.replace(/a\db/g, '*'));   ***aab*

    //a開頭b結(jié)尾中間是1或2或3
    console.log(str.replace(/a(1|2|3)b/g, '*'));  ***aaba4b

    // [] 中的值是被選值椅挣,匹配其中的一個(gè)
    console.log(str.replace(/a[123]b/g, '*')); ***aaba4b

    console.log(str.replace(/a[123456789]b/g, '*')); ***aab*
    console.log(str.replace(/a[1-9]b/g, '*')); ***aab*
    console.log(str.replace(/a[a-z]b/g, '*')); a1ba2ba3b*a4b
    console.log(str.replace(/a[A-Z]b/g, '*')); a1ba2ba3baaba4b
    console.log(str.replace(/a[a-zA-Z]b/g, '*')); a1ba2ba3b*a4b

    // 匹配的是1-5或7
    console.log(str.replace(/a[1-57]b/g, '*')); ***aab*

    //問題:匹配1-57
    /[1-9]|[1-4]\d|5[0-7]/

反向選擇 ^
var str = 'a1ba2ba3baaba4ba5ba6ba7b';
// ^ 在 [] 中使用头岔,表示反向選擇的意思,只能在 [] 的開始 ,除了1 2的
console.log(str.replace(/a[^12]b/g, '*'));  a1ba2b******
起始符和結(jié)束符

在正則中

^ : 字符串的起始鼠证; $ : 字符串的結(jié)尾

量詞

  • {n} 只能n次
  • {n,} 最少n次峡竣,最多不限
  • {n,m} 最少n次,最多m次
檢測(cè)qq號(hào)
var qq = '200824584'
console.log(/^[1-9]\d{4,11}$/.test(qq));  true
//第一位是1-9之間的數(shù)量九,后面數(shù)字在4到11位之間
常用正則符號(hào)
   \d : 一個(gè)數(shù)字
   \D : 一個(gè)非數(shù)字
   \w : 一個(gè)字符(字母數(shù)字下劃線)
   \W : 一個(gè)非字符(字母數(shù)字下劃線)
   \s : 一個(gè)空格
   \S : 一個(gè)非空格
   \b : 一個(gè)邊界符适掰,如果一個(gè)字母數(shù)字下劃線的左側(cè)或右側(cè)不在是一個(gè)字母數(shù)字下劃線,那么這里就會(huì)有一個(gè)符號(hào):邊界符
   \B : 一個(gè)非邊界符
   
   . : 任意字符荠列,除了換行符

重復(fù)子項(xiàng)
{n} : {n}表示的是一個(gè)數(shù)字 \1 \2 \3
//重復(fù)第n個(gè)子項(xiàng)匹配的內(nèi)容
/(a)b\1/      // \1必須和第一個(gè)子項(xiàng)的內(nèi)容是一致的
/(\d)a\1/    // \1位置上的內(nèi)容必須和第一個(gè)子項(xiàng)的內(nèi)容保持一致

var str = 'aaaaaabbbbbbjjjjjtttttttttttiiiidddd';
    var n = 0;
    var s = '';
    str.replace(/(\w)\1+/g, function($0, $1) {
        if ($0.length > n) {
            n = $0.length;
            s = $1;
        }
    });
    console.log('出現(xiàn)次數(shù)最多的是' + s + '类浪,一共出現(xiàn)了' + n + '次');
    //出現(xiàn)次數(shù)最多的是t,一共出現(xiàn)了11次

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肌似,一起剝皮案震驚了整個(gè)濱河市费就,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌川队,老刑警劉巖力细,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異固额,居然都是意外死亡艳汽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門对雪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人米绕,你說我怎么就攤上這事瑟捣。” “怎么了栅干?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵迈套,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我碱鳞,道長(zhǎng)桑李,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮贵白,結(jié)果婚禮上率拒,老公的妹妹穿的比我還像新娘。我一直安慰自己禁荒,他們只是感情好猬膨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呛伴,像睡著了一般勃痴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上热康,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天沛申,我揣著相機(jī)與錄音,去河邊找鬼姐军。 笑死铁材,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的庶弃。 我是一名探鬼主播衫贬,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼歇攻!你這毒婦竟也來了固惯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缴守,失蹤者是張志新(化名)和其女友劉穎葬毫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屡穗,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贴捡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了村砂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烂斋。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖础废,靈堂內(nèi)的尸體忽然破棺而出汛骂,到底是詐尸還是另有隱情,我是刑警寧澤评腺,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布帘瞭,位于F島的核電站,受9級(jí)特大地震影響蒿讥,放射性物質(zhì)發(fā)生泄漏蝶念。R本人自食惡果不足惜抛腕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媒殉。 院中可真熱鬧担敌,春花似錦、人聲如沸适袜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苦酱。三九已至售貌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疫萤,已是汗流浹背颂跨。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扯饶,地道東北人恒削。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尾序,于是被迫代替她去往敵國(guó)和親钓丰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • python re模塊重要函數(shù)變量:1. compile() 根據(jù)正則表達(dá)式字符串每币,創(chuàng)建模式的對(duì)象携丁。2. sear...
    野狗子嗷嗷嗷閱讀 298評(píng)論 0 1
  • JavaScript正則表達(dá)式筆記 概述 RegularExpression:安裝某種規(guī)則匹配指定內(nèi)容的單個(gè)字符串...
    hiccphp閱讀 361評(píng)論 0 4
  • 正則詳細(xì)文章 代碼之美,正則之道 創(chuàng)建正則表達(dá)式 1. 使用一個(gè)正則表達(dá)式字面量 2. 調(diào)用RegExp對(duì)象的構(gòu)造...
    Wood_yang閱讀 495評(píng)論 0 0
  • 正則表達(dá)式代表的匹配字符[0-9]0123456789任意之一[a-z]小寫字母任意之一[A-Z]大寫字母任意之一...
    隱墨留白閱讀 466評(píng)論 0 0
  • 《開學(xué)第一課》終于開播了兰怠。今年的主題為創(chuàng)造向未來梦鉴,由此也引發(fā)了我的深息。無論是"京劇小達(dá)人"王泓翔穭虛擬歌于"犀"...
    王添祥閱讀 190評(píng)論 0 2