正則就是我們定義的一個(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