keywords: 正則表達(dá)式雕憔。
-
\d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$
分別是什么?
\d:查找數(shù)字
\w:查找單詞字符(字母、數(shù)字结借、下劃線即(a-zA-Z0-9_))
\s:查找空白字符(空格、回車卒茬、換行映跟、tab即( \r\n\f\t\v))
[a-zA-Z0-9]:查找a-z、A-Z扬虚、0-9中的任意一個(gè)字符
\b:匹配單詞邊界努隙,一側(cè)為單詞字符(\w),另一側(cè)為非單詞字符辜昵、字符串的開始(^)或結(jié)束位置($)
.:查找單個(gè)字符荸镊,除了換行和行結(jié)束符(\n),如果要匹配包括“\n”在內(nèi)的所有字符,一般用[\s\S]或者[^]堪置。
+:匹配+前面的字符一次或多次
*****:匹配*前面的字符零次以上
?:匹配?前面的字符零次或一次
x{3}:匹配連續(xù)三個(gè)x
^n:脫字符號(hào)躬存,用來把n錨定在這一行的開頭。
[^abc]:查找任何不再方括號(hào)中的字符
n$:美元符號(hào)舀锨,用來把n錨定在這一行的結(jié)尾岭洲。
參考:
\b 單詞邊界
正則表達(dá)式參考
-
貪婪模式和非貪婪模式指什么?
? * + {min坎匿,max} 默認(rèn)是貪婪的盾剩,即在符合正則表達(dá)式的前提下雷激,盡可能多的匹配字符串。
相應(yīng)的告私,非貪婪模式指盡可能少的匹配字符串屎暇。
比如:
“This is a <EM>first</EM> test”
如果用\<.+>\去匹配,預(yù)期得到<EM>驻粟,但事實(shí)上得到的是<EM>first</EM>
這就是貪婪模式
上述例子中使用非貪婪模式有兩種辦法:
1根悼、\<.+?>\
(量詞后面接?可以使量詞進(jìn)入非貪婪模式蜀撑,匹配盡可能少的內(nèi)容)
2挤巡、\<[^<]+>\
參考:
深入淺出之正則表達(dá)式
代碼題
-
寫一個(gè)函數(shù)
trim(str)
,去除字符串兩邊的空白字符
function trim(str) {
return str.replace(/^\s+|\s+$/g,'')
}
-
使用正則實(shí)現(xiàn)
addClass(el, cls)酷麦、hasClass(el, cls)玄柏、removeClass(el,cls)
function addClass(el , cls) {
if (! hasClass(el , cls)) {
el.className += ' ' + cls
}
}
function hasClass(el , cls) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)' , 'g')
return reg.test(el.className)
}
function removeClass(el , cls) {
if (hasClass(el , cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\b|$)' , 'g')
el.className = el.className.replace(reg , '')
}
}
-
寫一個(gè)函數(shù)isEmail(str),判斷用戶輸入的是不是郵箱
function isEmail(str) {
var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/
return reg.test(str)
}
郵箱驗(yàn)證圖解
參考:
JS正則表達(dá)式結(jié)構(gòu)圖解
-
寫一個(gè)函數(shù)isPhoneNum(str)贴铜,判斷用戶輸入的是不是手機(jī)號(hào)
function isPhoneNum(str) {
var reg = /^((\+86)|(86))?1[3-9]\d{9}$/
return reg.test(str)
}
手機(jī)號(hào)驗(yàn)證圖解
-
寫一個(gè)函數(shù)isValidUsername(str)粪摘,判斷用戶輸入的是不是合法的用戶名(長(zhǎng)度6-20個(gè)字符,只能包括字母绍坝、數(shù)字徘意、下劃線)
function isValidUsername(str) {
var reg = /^[a-zA-Z]\w{5,19}$/
return reg.test(str)
}
用戶名驗(yàn)證圖解
-
寫一個(gè)函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長(zhǎng)度6-20個(gè)字符,包括大寫字母轩褐、小寫字母椎咧、數(shù)字、下劃線至少兩種)
function isValidPassword(str) {
var reg = /^\w{6,20}$/
if (reg.test(str)) {
if (str.match(/^[A-Z]+$/)) return false
else if (str.match(/^[a-z]+$/)) return false
else if (str.match(/^[0-9]+$/)) return false
else if (str.match(/^_+$/)) return false
else return true
} else return false
}
-
寫一個(gè)正則表達(dá)式把介,得到如下字符串里所有的顏色(#121212)
var re =/(#[0-9A-F]{6}\b)|(#[0-9A-F]{3})\b/ig
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 "
subj.match(re) // #121212,#AA00ef #fd2
-
下面代碼輸出什么? 為什么? 改寫代碼勤讽,讓其輸出hunger, world.
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g; //匹配的內(nèi)容:引號(hào)、若干字符拗踢、引號(hào)脚牍。又因?yàn)?默認(rèn)為貪婪模式,因此會(huì)盡可能匹配符合正則的內(nèi)容
str.match(pat);
//["hunger" , hello "world"']
//===============改寫====================
var str = 'hello "hunger" , hello "world"';
var pat = /".*?"/g;
str.match(pat);
-
補(bǔ)全如下正則表達(dá)式巢墅,輸出字符串中的注釋內(nèi)容. (可嘗試使用貪婪模式和非貪婪模式兩種方法)
================非貪婪模式========================
str = '.. <!-- My -- comment \n test --> .. <!----> .. '
re = /<!--[^]*?-->/g
str.match(re) // '<!-- My -- comment \n test -->', '<!---->'
================貪婪模式========================
str = '.. <!-- My -- comment \n test --> .. <!----> .. '
re = /<!--[^>]*-->/g
str.match(re) // '<!-- My -- comment \n test -->', '<!---->'
-
補(bǔ)全如下正則表達(dá)式
var re = /<[^>]+>/g
var str = '<> <a href="/"> <input type="radio" checked> <b>'
str.match(re) // '<a href="/">', '<input type="radio" checked>', '<b>'