1. \d
,\w
,\s
,[a-zA-Z0-9]
,\b
,.
,*
,+
,?
,x{3}
,^$
分別是什么?
\d:數(shù)字字符胁镐,等價(jià)于[0-9]
\w:?jiǎn)卧~字符参袱,字母相味、數(shù)字、下劃線爷狈,等價(jià)于[a-zA-Z0-9_]
\s: 空白符植影,等價(jià)于[\t\n\x0B\f\r]
\b:?jiǎn)卧~邊界
.: 除了回車符和換行符之外的所有字符,等價(jià)于[^\r\n]
*:出現(xiàn)零次或多次(任意次)
+:出現(xiàn)一次或多次
?:出現(xiàn)零次或一次
x{3}:x必須出現(xiàn)3次
^: 首匹配
$: 尾匹配
2. 貪婪模式和非貪婪模式指什么?
貪婪模式:指 {n,m}涎永、?思币、+、*
這些在默認(rèn)情況下都是盡最大可能地匹配羡微,直到下一個(gè)字符不滿足匹配規(guī)則為止
非貪婪模式與貪婪模式相反谷饿,即盡可能少地匹配,在正則表達(dá)式的量詞后面添加個(gè) ?
即可
代碼
1. 寫一個(gè)函數(shù) trim(str)
妈倔,去除字符串兩邊的空白字符
var str = " hello world ";
// 方法 1
function trim(str){
var pattern = /\b.+\b/g;
var result = pattern.exec(str);
return result;
}
// 方法 2
function trim(str){
var pattern = /^\s*(.+?)\s*$/g;
var result = pattern.exec(str)[1];
var result = str.replace(pattern,"$1");
return result;
}
// 方法 3
function trim(str){
var pattern = /^\s*|\s*$/g;
return str.replace(pattern,'');
}
2. 使用實(shí)現(xiàn) addClass(el, cls)
博投、hasClass(el, cls)
、removeClass(el, cls)
启涯,使用正則表達(dá)式
var preClass = "hello world";
function addClass(preClass, appendClass){
var pattern = new RegExp(appendClass,"gi");
if(pattern.test(preClass)){
return preClass;
}else{
return preClass.concat(" ", appendClass);
}
}
function hasClass(preClass, testClass){
var pattern = new RegExp(testClass,"gi");
if(pattern.test(preClass)){
console.log("已存在該 Class");
}else{
console.log("不存在該 Class");
}
}
function removeClass(preClass, reduceClass){
var pattern = new RegExp("\\s*\\b" + reduceClass + "\\b\\s*","gi");
if(pattern.test(preClass)){
return preClass.replace(pattern,"");
}else{
return preClass;
}
}
3. 寫一個(gè)函數(shù) isEmail(str)
贬堵,判斷用戶輸入是不是郵箱
var email = "hellowold.com@gmail.com";
function isEmail(str){
var pattern = /^([\w\.\-]+)@([a-zA-Z0-9]+)\.([a-zA-Z]{2,4})$/;
if(pattern.test(str)){
console.log("這是郵箱");
}else{
console.log("這不是郵箱");
}
}
4. 寫一個(gè)函數(shù) isPhoneNumber(str)
,判斷用戶輸入是不是手機(jī)號(hào)
var phoneNumber = "13712345678";
function isPhoneNumber(str){
var pattern = /^1([3-9]){2}\d{8}$/g;
if(pattern.test(str)){
console.log("這是手機(jī)號(hào)碼");
}else{
console.log("這不是手機(jī)號(hào)碼");
}
}
5. 寫一個(gè)函數(shù) isValidUsername(str)
结洼,判斷用戶輸入是不是合法的用戶名(長(zhǎng)度6-20個(gè)字符黎做,只能包括字母、數(shù)字松忍、下劃線)
var userName = "username_1";
function isValidUsername(str){
var pattern = /^\w{6,20}/g;
if(pattern.test(str)){
console.log("這是合法用戶名");
}else{
console.log("這不是合法用戶名");
}
}
6. 寫一個(gè)函數(shù) isValidPassword(str)
蒸殿,判斷用戶輸入是不是合法的密碼(長(zhǎng)度6-20個(gè)字符,包括大寫字母鸣峭、小寫字母宏所、數(shù)字、下劃線至少兩種)
function isValidPassword (str){
if(str.match(/^(?!^\d+$)(?!^[A-Z]+$)(?!^[a-z]+$)(?!^[_]+$).{6,20}$/) && str.match(/^\w{6,20}$/)) {
console.log("這是合法密碼");
}else{
console.log("這不是合法密碼");
}
}
7. 寫一個(gè)正則表達(dá)式摊溶,得到如下字符串里所有的顏色(#121212)
var re = /(\#[0-9a-fA-F]{6})|(\#[0-9a-fA-F]{3})/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: #ffddee #fd2 ";
console.log( subj.match(re) );
8. 下面代碼輸入什么爬骤?為什么?改寫代碼莫换,讓其輸出 hunger
霞玄,world
var str8 = 'hello "hunger" , hello "world"';
var pattern8 = /".*?"/g;
console.log( str8.match(pattern8) );
如果不加 ?
,則是貪婪模式拉岁,直接匹配到最后坷剧。
9. 補(bǔ)全如下正則表達(dá)式,輸出字符串中的注釋內(nèi)容喊暖。(可嘗試使用貪婪模式和非貪婪模式兩種方法)
var str9 = '.. <!-- My -- comment \n test --> .. <!----> .. ';
// 貪婪模式
var pattern9_1 = /<!--[^>]*-->/g;
// 非貪婪模式
var pattern9_2 = /<!--[\w\W]*?-->/g;
console.log( str9.match(pattern9_1) );
console.log( str9.match(pattern9_2) );
10. 補(bǔ)全如下正則表達(dá)式
var str10 = '<> <a href="/"> <input type="radio" checked> <b>';
// '<a href="/">', '<input type="radio" checked>', '<b>'
// 貪婪模式
var pattern10_1 = /<[^>]+>/g;
console.log(str10.match(pattern10_1));
// 非貪婪模式
var pattern10_2 = /<[\w].*?>/g;
console.log(str10.match(pattern10_2));