正則表達(dá)式
正則表達(dá)式是什么喜颁?有什么用?什么時(shí)候用曹阔?
1半开、正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,也叫規(guī)則表達(dá)式
2赃份、符合規(guī)則的就放行寂拆,不符合規(guī)則的就拒絕
3、在登錄或注冊(cè)或有表單芥炭,需要驗(yàn)證的時(shí)候用
一漓库、創(chuàng)建正則表達(dá)式對(duì)象
(1)字面量方式
斜杠內(nèi)的為規(guī)則恃慧,i為屬性
//1园蝠、字面量
var reg = /Grayly/i;
var str1 = 'fndajkdfhiGraylyfasidjkhfgil';
var str2 = 'dasifhlbnluoahdfn';
console.log(reg.test(str1)); //true
console.log(reg.test(str2)); //false
(2)用構(gòu)造函數(shù)的方式
var reg1 = new RegExp('Grayly', 'i'); //i 不區(qū)分大小寫 g全局匹配 m多行匹配
var str3 = 'hsnajkfnagrayly';
console.log(reg1.test(str3));
(3)屬性
- i:不區(qū)分字母大小寫
- g:全局匹配
- m:多行匹配
(4)字符串替換:replace
var str4 = 'aaa, bbb , ccc, ddd, bbb';
var newStr = str4.replace(/bbb/g, 'grayly');
console.log(newStr);
二、常用匹配規(guī)則
1痢士、元字符
(1)^:匹配字符串的開(kāi)始
(2)$:匹配字符串的結(jié)尾
//1彪薛、匹配 ^開(kāi)始 和 匹配$結(jié)尾
var reg = /^Grayly$/; //必須以G開(kāi)頭,y結(jié)尾怠蹂,中間是rayl才通過(guò)
var str1 = 'Grayly';
console.log(reg.test(str1));
(3).:匹配任意字符
var reg2 = /b..k/;
var str3 = 'book';
console.log(reg2.test(str3));
(4)\w:數(shù)字善延、字母、下劃線
//3城侧、\w(數(shù)字易遣、字母、下滑線中的一種)
var reg3 = /b\w\wk/;
var str5 = 'book';
console.log(reg3.test(str5));
(5)\s:任意空白字符
//4嫌佑、\s空白字符var reg3 = /b\w\wk/;
var reg4 = /b\s\sk/;
var str7 = 'b k';
console.log(reg4.test(str7));
(6)\d:匹配數(shù)字豆茫,等同于[ 0 - 9]
//5、 \d 匹配數(shù)字
var reg5 = /b\d\dk/;
var str10 = b11k;
console.log(reg5.test(str10));
(7)\D:匹配非數(shù)字屋摇,等同于[ ^ 0 - 9]
// \d匹配數(shù)字 \D非數(shù)字
var reg = /\Dook/;
var str = '8ook';
(8)|:或匹配揩魂,取其中的任意一位
// | 或
var reg = /^1(3|4|5|6|7|8)\d\d\d\d\d\d\d\d\d$/;
var str1 = '18800000000';
var str2 = '12800000000'
(9)[ xy ]:表示方括號(hào)包含的x、y中的一個(gè)
// [abc] 代表一個(gè)字符,字符只能是abc中的一個(gè)
var reg = /^1[345678]\d\d\d\d\d\d\d\d\d$/;
var str1 = '18800000000'; //
var str2 = '12800000000'; //
2炮温、特殊字符
(1)轉(zhuǎn)義字符: \ ...
斜杠后面跟著的字符都會(huì)被消除自身語(yǔ)法
(2)[ ]:表達(dá)式
一個(gè)方括號(hào)代表一位字符火脉,里面寫范圍
(3)[ ^ ]:非
在方括號(hào)內(nèi)的^,表示為非,即取反
eg:[ ^xyz ]:除了xyz之外任意字符
3、重復(fù)匹配
(1)倦挂?:重復(fù)出現(xiàn)0次或1次
var reg = /^bo?k$/; // b開(kāi)頭,0個(gè)或者1個(gè)o,以k結(jié)尾
var str = 'bok';
(2)+:重復(fù)出現(xiàn)1次或多次
var reg = /^bo+k$/; // b開(kāi)頭,1個(gè)或多個(gè)o,k結(jié)尾
var str = 'bok';
var str = 'booooooooook';
(3)*:重復(fù)出現(xiàn)0次或多次
var reg = /^bo*k$/; //b開(kāi)頭,0個(gè)或多個(gè)o,k結(jié)尾
var str = 'booooooooook';
(4){ n }:重復(fù)出現(xiàn)n次
var reg = /^bo{2}k$/; // 匹配book 2個(gè)o
(5){ n畸颅, }:至少重復(fù)出現(xiàn)n次
var reg = /^bo{2,5}k$/; // 匹配book 2個(gè)o以上
(6){ n, m}:重復(fù)出現(xiàn)n到m次
var reg = /^bo{2,5}k$/; // 匹配book 2個(gè)o以上,5個(gè)o以下
4方援、分組
(1)用括號(hào)分組
\1:對(duì)第一個(gè)括號(hào)的重復(fù)重斑,\2:對(duì)第二個(gè)括號(hào)的重復(fù),以此類推
// 日期的匹配 2000-1-11 \1 對(duì)第一個(gè)括號(hào)的重復(fù)
var reg = /^\d{4} (\-|\.) \d{1,2} \1 \d{1,2}$/;
(2)分組的應(yīng)用
應(yīng)用
var reg = /(.*)(程序員)(.*)/;
var str = '我是web前端程序員,我來(lái)自深圳';
console.log(reg.test(str));
// 將程序員替換成攻城獅
var newStr = str.replace(reg, '$1攻城獅$3');
console.log(newStr);
替換手機(jī)號(hào)中間4位
//其中一個(gè)括號(hào)為一個(gè)$肯骇,有三個(gè)括號(hào)窥浪,按順序分別為 $1、$2笛丙、$3
var phone = '15013795539';
var reg = /(\d{3})\d{4}(\d{4})/;
var newPhone = phone.replace(reg, '$1****$2');
console.log(newPhone);