2021-08-25 正則表達(dá)式

正則就是我們定義的一個(gè)規(guī)則表達(dá)式(我們按一定的語(yǔ)法定義的規(guī)則)

正則表達(dá)式作用:用來(lái)匹配檢測(cè)字符串

按照我們定義的規(guī)則,檢測(cè)字符串是否合格


如何創(chuàng)建正則表達(dá)式

1. 字面量創(chuàng)建

var reg1 = /qwe/;


console.log( typeof reg1); ?// object

console.log(reg1);

2. 內(nèi)置構(gòu)造函數(shù)創(chuàng)建

var reg2 = new RegExp('qwe');

console.dir(reg2);


正則表達(dá)式是復(fù)雜數(shù)據(jù)類型(引用數(shù)據(jù)類型)



正則表達(dá)式是檢測(cè)字符串是否符合規(guī)則的

.test(參數(shù)) ?參數(shù)我們要檢測(cè)的字符串

語(yǔ)法:正則.test(你要檢測(cè)的字符串);

返回值:布爾值栅干,檢測(cè)合格返回true 否則返回false


var reg = /qwe/; ?// 字符串中是否有qwe字符串

var str = '1q23w34e56';

var res = reg.test(str);

console.log(res); // false

console.log(/qwer/.test('123qqqwert123')); // true


正則表達(dá)式是由文本和一些具有特殊含義的字符組成的


?元字符

1. \d ?表示數(shù)字(0-9)

var reg = /\d/; ??// 看字符串中是否有數(shù)字

console.log(reg.test('qwert')); // false

console.log(reg.test('qwert0')); // true

console.log(reg.test('')); // false

console.log(reg.test('1234456')); // true


2. \D ?表示非數(shù)字

console.log(/\D/.test('1234567'));// false

console.log(/\D/.test('12345670o'));// true


3. \s ?表示空白字符

console.log(/\s/.test('0')); // false

console.log(/\s/.test('')); // false

console.log(/\s/.test(' ')); // true

console.log(/\s/.test('12345 6')); // true

console.log(/\s/.test()); // false


4. \S ?表示非空白字符

console.log(/\S/.test(''));// false

console.log(/\S/.test());// true

console.log(/\S/.test(' ')); // false

console.log(/\S/.test('1 1')); // true


5. \w 數(shù)字字母下劃線

console.log(/\w/.test('!@#$-')); // false

console.log(/\w/.test('amdin123')); // true


6. \W 非數(shù)字字母下劃線

console.log(/\W/.test('1234567'));// false

console.log(/\W/.test('qwert')); // false

console.log(/\W/.test('_1_2_')); // false

console.log(/\W/.test('!@#$-'));// true

console.log(/\W/.test('!@#12334$-'));// true


7. 點(diǎn) . ?表示非換行的字符

console.log(/./.test('\n')); // false

console.log(/./.test(' ')); // true

console.log(/./.test('q24'));// true



元字符:

\d ?數(shù)字

\D ?非數(shù)字

\s ?空白符

\S ?非空白符

\w ?數(shù)字字母下劃線

\W ?非數(shù)字字母下劃線

. ??非換行字符 ?????



限定符,幫我們限定出現(xiàn)的次數(shù)


1. * ??0到無(wú)數(shù)次

console.log(/\d*/.test('1234')); // true

console.log(/\d*/.test('qwert'));// true


2. + ??1次到無(wú)數(shù)次

console.log(/\d+/.test('1234')); // true

console.log(/\d+/.test('qwert'));// false


3. ? ??只要0次或1次就可以

console.log(/\d?/.test('1234')); // true

console.log(/\d?/.test('qwert')); // true


4. {n} ?只要出現(xiàn)連續(xù)n次就可以

console.log(/\d{2}/.test('1234')); // true

console.log(/\d{2}/.test('1qwer1')); // false


5. {n,m} ?只要出現(xiàn)連續(xù)的n到m次

console.log(/\d{2,4}/.test('123')); // true

console.log(/\d{2,4}/.test('1234')); // true

console.log(/\d{2,4}/.test('12345'));// true

console.log(/\d{2,4}/.test('1q2w3e4r')); // false


6. {n,} ?只要連續(xù)的出現(xiàn)n次到無(wú)數(shù)次

console.log(/\d{3,}/.test('12')); // false

console.log(/\d{3,}/.test('1234')); // ?true

console.log(/\d{3,}/.test('12345'));// ?true

console.log(/\d{3,}/.test('1q2w3e4r')); // false



限定符

* ?0~無(wú)數(shù)次 ?{0,}

+ ?1~無(wú)數(shù)次 ?{1,}

? ?0或1次 ???{0,1}

{n} ?連續(xù)出現(xiàn)n次

{n,m} ?連續(xù)出現(xiàn)n次到m次

{n,} ?連續(xù)出現(xiàn)n次到無(wú)數(shù)次



??邊界符,限定開頭和結(jié)尾

^ 表示開頭

$ 表示結(jié)尾


// 特殊符號(hào)



1. \ 轉(zhuǎn)義

會(huì)將普通的字符啰挪,轉(zhuǎn)為有特殊含義的字符

w普通的字符--------> \w 數(shù)字字母下劃線

會(huì)將具有特殊含義的字符,轉(zhuǎn)為普通的字符

. 非換行的字符------> ?\. 僅僅表示點(diǎn)這個(gè)字符嘲叔,沒(méi)有特殊函數(shù)


2. - 范圍

0-9 表示0到9的數(shù)字亡呵,a-z 表示所有的小寫字母 A-Z 表示所有的大寫字母


3. [] 表示一個(gè)字符集合,只要[]中字符集合的一個(gè)匹配就行

console.log(/^[1234]/.test('12432')); // true

console.log(/^[1234]/.test('4567www')); // true

console.log(/^[1234]/.test('567www')); // false


4. () 表示一個(gè)字符組硫戈,把小括號(hào)中的看做一個(gè)整體

console.log(/^(1234)/.test('123432')); // true

console.log(/^(1234)/.test('1235www')); // false

console.log(/^(1234)/.test('2345www')); // false


5. | 或者

console.log(/^[12|34|56]/.test('123456')) // true

console.log(/^[12|34|56]/.test('12w3456')) // true

console.log(/^[12|34|56]/.test('w3456')) // false

console.log(/^[12|34|56]/.test('322456'))// true


console.log(/^(12|34|56)/.test('123456')); // true

console.log(/^(12|34|56)/.test('1323456')); // false

console.log(/^(12|34|56)/.test('23456')); // false

console.log(/(12|34|56)$/.test('34w56')); // true

console.log(/(12|34|56)$/.test('234w56')); // false


6. [^] ?表示除了[^ ?]中的字符不匹配锰什,別的都可以匹配

console.log(/[^1234]/.test('1qwee')); // true

console.log(/[^1234]/.test('qwee')); //true

console.log(/[^1234]/.test('qwee1234')); // true

console.log(/[^1234]/.test('1234')); // false

console.log(/^[^1234]/.test('1qwee')); // false


?標(biāo)識(shí)符,放在正則表達(dá)式的最后面

i 表示忽略大小的匹配

g 表示全局匹配


var reg1 = /[a-z]/ig;

var reg2 = new RegExp('[a-z]','ig');

console.log(reg1,reg2);


console.log(/^[a-z]$/.test('qwee')); // false

console.log(/^[a-z]/.test('ASD')); // false

console.log(/^[a-z]/i.test('ASD')); // true

console.log(/[a-z]/ig.test('ASD')); // true



exec() 方法

正則.exec(參數(shù)) ?參數(shù)就是要檢測(cè)的字符串

返回值,返回第一個(gè)匹配到的字符串的數(shù)組歇由,如果匹配不到返回null


var reg = /\d{2}/g;

var str = '12w34e56';

var str = '1wwww2www';

console.log(reg.exec(str));


如果正則表達(dá)式中使用g的標(biāo)識(shí)符,則表示全局匹配

每匹配完一次,下次匹配就在上一次匹配結(jié)束之后的基礎(chǔ)上匹配

var arr1 = reg.exec(str);

console.log(arr1[0]);

console.log(reg.exec(str));

console.log(reg.exec(str));

console.log(reg.exec(str));


先定義一個(gè)空數(shù)組來(lái)接受匹配到的字符串

var arr = [];

var strArr; // 每次匹配到的字符串?dāng)?shù)組

while(strArr = reg.exec(str)){

將匹配到的字符串放到數(shù)組中

arr.push(strArr[0]);

}

console.log(arr);



console.log(Boolean([12432])); ?// true

console.log(Boolean([])); ?// true

?js中轉(zhuǎn)為布爾值為false的數(shù)據(jù) ?0 ?'' ?NaN ?undefined ?null 其他的都為true



1. replace(正則表達(dá)式,要替換為什么內(nèi)容) 匹配正則卵牍,然后替換

var str = '無(wú)論多大麻煩,黑夜總會(huì)過(guò)去';

console.log(str.replace(/(大麻|夜總會(huì))/g,'*'));


2. search(正則) ?匹配到字符串中是否有合格的然后索引,匹配不到返回-1

var str = '12w34w56e';

var reg = /\d{2}/

var res = str.search(reg);

console.log(res);


3. match(正則) ?返回匹配到的字符串的數(shù)組沦泌,如果是全局匹配糊昙,匹配到多個(gè)返回?cái)?shù)組

如果匹配不到返回空null

var time = '今天的日期是2021-08-25';

var reg = /\d{2,4}/g;

var res = time.match(reg);

console.log(res); // ["2021", "08", "25"]


正則匹配字符串,會(huì)盡量的按多個(gè)次數(shù)匹配谢谦,拿到結(jié)果



// 需求:用戶名要求是 6到12位字母數(shù)字下劃線組成

/^\w{6,12}$/


qq號(hào) ?5位11位數(shù)字 ?第一位不為0

/^[1-9]\d{4,10}$/

console.log(/^[1-9]\d{4,10}$/.test('01234567'));


郵箱

非_$開頭释牺,任意字符出現(xiàn)至少6次,一個(gè)@符號(hào)回挽,(163|126|qq|sina)中的任意一個(gè)没咙,一個(gè)點(diǎn),(com|cn|net)中的任意一個(gè)


admin123@163.com

admin123@qq.com

/^[^_$]\w{5,}@(163|126|qq|sina)\.(com|cn|net)$/


/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/


中文匹配

console.log(/[\u4e00-\u9fa5]/.test('中文')); // true

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末千劈,一起剝皮案震驚了整個(gè)濱河市祭刚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墙牌,老刑警劉巖涡驮,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異喜滨,居然都是意外死亡捉捅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門虽风,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棒口,“玉大人,你說(shuō)我怎么就攤上這事辜膝∥耷#” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵厂抖,是天一觀的道長(zhǎng)合敦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)验游,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任保檐,我火速辦了婚禮耕蝉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夜只。我一直安慰自己垒在,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布扔亥。 她就那樣靜靜地躺著场躯,像睡著了一般谈为。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踢关,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天伞鲫,我揣著相機(jī)與錄音,去河邊找鬼签舞。 笑死秕脓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的儒搭。 我是一名探鬼主播吠架,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搂鲫!你這毒婦竟也來(lái)了傍药?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤魂仍,失蹤者是張志新(化名)和其女友劉穎拐辽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓄诽,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薛训,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仑氛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乙埃。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锯岖,靈堂內(nèi)的尸體忽然破棺而出介袜,到底是詐尸還是另有隱情,我是刑警寧澤出吹,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布遇伞,位于F島的核電站,受9級(jí)特大地震影響捶牢,放射性物質(zhì)發(fā)生泄漏鸠珠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一秋麸、第九天 我趴在偏房一處隱蔽的房頂上張望渐排。 院中可真熱鬧,春花似錦灸蟆、人聲如沸驯耻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)可缚。三九已至霎迫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帘靡,已是汗流浹背知给。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留测柠,地道東北人炼鞠。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像轰胁,于是被迫代替她去往敵國(guó)和親谒主。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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