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

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

正則表達(dá)式作用:用來匹配檢測(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è)的字符串

語法:正則.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到無數(shù)次

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

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


2. + ??1次到無數(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次到無數(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~無數(shù)次 ?{0,}

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

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

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

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

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



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

^ 表示開頭

$ 表示結(jié)尾


// 特殊符號(hào)



1. \ 轉(zhuǎn)義

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

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

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

. 非換行的字符------> ?\. 僅僅表示點(diǎn)這個(gè)字符,沒有特殊函數(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ù)組來接受匹配到的字符串

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 = '無論多大麻煩,黑夜總會(huì)過去';

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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容