定義
RegExp === Regular Expression :
一種用來描述字符組合特征的匹配模式-
作用
- 替換/刪除文本
- 測試字符串內(nèi)的模式
- 根據(jù)模式匹配從字符串中提取一個(gè)子字符串,用來
在文本或者輸入字段中查找特定的文字
語法
var re = / 字符 / 標(biāo)志;標(biāo)志 可選
g全局搜索。
i不區(qū)分大小寫搜索。
m多行搜索。
y執(zhí)行“粘性”搜索,匹配從目標(biāo)字符串的當(dāng)前位置開始,可以使用y標(biāo)志。
-
常見字符
\d表示數(shù)字字符;等價(jià)于[0-9]
\w單詞字符,數(shù)字,下劃線;等價(jià)于[a-zA-Z0-9_]
\s空白符;等價(jià)于[\t\n\f\x0B\r]
[a-zA-Z0-9]單詞字符、字母、數(shù)字
\b單詞邊界
.除了回車和換行外的所有字符;
*出現(xiàn)0次或多次
+至少出現(xiàn)一次
?出現(xiàn)0次或1次
x{3}出現(xiàn)3次x
^$表示開始和結(jié)尾;
-
匹配模式
在整個(gè)表達(dá)式匹配成功的提前下- 貪婪模式 :盡可能多的匹配,即一般趨于最大長度匹配。
- 非貪婪模式:以最少的匹配字符。
-
使用方式
正則:
test () 方法執(zhí)行一個(gè)檢索,用來查看正則表達(dá)式與指定的字符串是否匹配。
RegExp.test( str )
// 返回true或false**exec() **方法為指定的一段字符串執(zhí)行搜索匹配操作。
RegExp.exec( str )
// 返回一個(gè)數(shù)組或null
字符串:
-
search() 查找
查找該字符串對(duì)象與一個(gè)正則表達(dá)式是否匹配
str.search( regexp )
// 返回-1或匹配項(xiàng)索引 -
replace() 替換
使用一個(gè)替換值,替換掉一個(gè)匹配模式。
str.test( Substr , newSubstr )
// 返回替換之后的字符串
應(yīng)用
- 去除字符串兩邊的空白字符
function trim(str) {
var re = /^\s+|\s+$/g;
str.replace(re,"");
return str;
}
-
實(shí)現(xiàn)
addClass(el, cls)、hasClass(el, cls)、removeClass(el,cls)
function hasClass(el,cls) {
var reg=new RegExp('(\s|^)'+cls+'(\s|$)','g');
return reg.test(el.className);
}function addClass(el,cls){ if(!hasClass(el,cls)){ el.className=el.className+" "+cls; } } function removeClass(el,cls) { var reg=new RegExp('(\\s|^)'+cls+'(\\s|$)','g'); el.className=(el.className).replace(reg,""); } 判斷郵箱
function isEmail(str){
reg=/(^\w+)@(\w+).com$/g;
return reg.test(str);
}判斷手機(jī)號(hào)
function isPhoneNum(str){
reg=/^1[3-8]\d{9}$/;
return reg.test(str);
}判斷合法的用戶名(長度6-20個(gè)字符,只能包括字母、數(shù)字、下劃線)
function isValidUsername(str){
reg=/^\w{6,20}$/;
return reg.test(str)? "合法":"非法";
}判斷合法密碼(長度6-20個(gè)字符,只包括大寫字母、小寫字母、數(shù)字、下劃線,且至少包括兩種)
function isValidPassword(str) {
if (/^[a-zA-Z0-9_]{6,20}$/.test(str)) {
return true
}else{
return "長度6-20個(gè)字符,包括大寫字母、小寫字母、數(shù)字、下劃線至少兩種"
}
}匹配顏色
var re = /#\w{6}/g;
var subj = "color: #121212; background-color: #AA00ef;
width: 12px; bad-colors: f#fddee #fd2 "
alert( subj.match(re) ) // #121212,#AA00ef
-
修改正則表達(dá)式
原始
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;--------------------------------->貪婪模式
str.match(pat); //輸出[""hunger" , hello "world""]修改 var str = 'hello "hunger" , hello "world"'; var pat = /".*?"/g;--------------------------------->非貪婪模式 console.log(str.match(pat)); //輸出["hunger","world"] -
補(bǔ)全正則表達(dá)式
非貪婪模式
str = '.. .. .. '
re = //
gstr.match(re); // ["", ""]貪婪模式 str = '.. <!-- My -- comment \n test --> .. <!----> .. ' re = /<!--[^>]*/g; // str.match(re); 補(bǔ)全正則表達(dá)式
非貪婪模式
var re = /<.+?>/gvar
str = '<> <a href="/"> <input type="radio" checked> <b>'
str.match(re) // '<a href="/">', '<input type="radio" checked>', '<b>'
貪婪模式
var re = /<[ ^>]+>/gvar
str = '<> <a href="/"> <input type="radio" checked> <b>'
str.match(re) // '<a href="/">', '<input type="radio" checked>', '<b>'