一幢泼、\d毁习,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$分別是什么?
-
\d
:查找數(shù)字 -
\w
:查找單詞字符(字符缰贝、數(shù)字嘱么、下劃線) -
\s
:查找空白字符(空格、tab柒傻、換行孝赫、回車)。 -
[a-zA-Z0-9]
: 查找任何從 0 至 9 的數(shù)字和查找任何從大寫 A 到大寫 Z 的字符和查找任何從大寫 A 到小寫 z 的字符红符。 -
\b
:匹配單詞邊界青柄。 -
.
:查找單個字符,除了換行和行結(jié)束符预侯。 -
*
:匹配任何包含零個或多個 n 的字符串致开。貪婪模式 -
+
:匹配任何包含至少一個 n 的字符串。 -
?
:匹配任何包含零個或一個 n 的字符串萎馅。非貪婪 -
x{3}
: 匹配包含至少 3個 x 的序列的字符串双戳。 -
^$
:只有當(dāng)字符又是頭又是尾的時候才符合;
二 糜芳、貪婪模式和非貪婪模式指什么?
- 貪婪模式 : 正則表達(dá)式匹配中飒货,盡可能匹配多的字符串,瀏覽器默認(rèn)貪婪模式峭竣。
非貪婪模式:正則表達(dá)式匹配中塘辅,盡可能少的匹配。如:n?
三邪驮、代碼題
1.寫一個函數(shù)trim(str)莫辨,去除字符串兩邊的空白字符
var str = ' i want to play basketball ';
function trim(str){
var str2 = str.replace(/^\s/,'');
var str3 = str2.replace(/\s$/,'');
return str3;
}
trim(str);
2.使用實(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 + '(\\b|$)','g');
return reg.test(el.className);
}
function removeClass(el, cls){
var reg = new RegExp('(\\s|^)' + cls + '(\\b|$)','g');
if(hasClass(el, cls)){
el.className = el.className.replace(reg,'')
}
}
3.寫一個函數(shù)isEmail(str)沮榜,判斷用戶輸入的是不是郵箱
var str1 = 'way_ne@qq.com';
var str2 = 'way_ne@163.cn.net';
var str3 = 'way_ne@qq.com.cn.net';
function isEmail(str){
var email = /^\w+@[a-z0-9]+(\.[a-z]+){1,3}$/;
if(email.test(str)){
console.log('對的,這是一個郵箱地址')
}else{
console.log('Oh,is not an avaliable email address')
}
}
isEmail(str1);
isEmail(str2);
isEmail(str3);
測試
4.寫一個函數(shù)isPhoneNum(str)喻粹,判斷用戶輸入的是不是手機(jī)號
var str1 = '1325869482';
var str2 = '15444353642';
var str3 = '22424245244';
var str4 = '224242452443';
function isPhoneNum(str){
var phone = /^[1][356789](\d+){9}$/;
if(phone.test(str)){
console.log('is phone numer')
}else{
console.log('unavailable number')
}
}
isPhoneNum(str1);
isPhoneNum(str2);
isPhoneNum(str3);
isPhoneNum(str4);
測試
5.寫一個函數(shù)isValidUsername(str)蟆融,判斷用戶輸入的是不是合法的用戶名(長度6-20個字符,只能包括字母守呜、數(shù)字型酥、下劃線)
var str1 = 'way_ne';
var str2 = 'jimmybaby123';
var str3 = '123456789123456789123';
var str4 = 'tommy-kitty';
function isValidUsername(str){
var userName = /^(\w){6,20}$/;
if(userName.test(str)){
console.log('avaliable username');
}else{
console.log('unavailable username');
}
}
isValidUsername(str1);
isValidUsername(str2);
isValidUsername(str3);
isValidUsername(str4);
測試
6.寫一個函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長度6-20個字符,包括大寫字母查乒、小寫字母弥喉、數(shù)字、下劃線至少兩種)
var str1 = 'luekcni134';
var str2 = 'DSNCsnc28ld';
var str3 = '1231121211';
var str4= 'lnd2e';
function isValidPassword(str){
if(str.length<6 || str.length>20){
return false;
}
if(/[^A-Za-z_0-9]/.test(str)){
return false;
}
if(/(^[a-z]+$)|(^[A-Z]+$)|(^_+$)|(^\d+$)/g.test(str)){
return false;
}
return true;
}
isValidPassword(str1);
isValidPassword(str2);
isValidPassword(str3);
isValidPassword(str4);
測試
7.寫一個正則表達(dá)式玛迄,得到如下字符串里所有的顏色(#121212)
var re = /#([0-9a-zA-Z]+){6}/g ;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 ";
console.log( subj.match(re) ); // #121212,#AA00ef
測試
8.下面代碼輸出什么? 為什么? 改寫代碼由境,讓其輸出hunger, world.
//下面代碼輸出什么? 為什么? 改寫代碼,讓其輸出hunger, world.
var str = 'hello "hunger" , hello "world"';
//var pat = /".*"/g; 輸出 "hunger" , hello "world"貪婪模式下匹配全局的".*"只要兩邊界有引號的都會匹配上蓖议;
var pat = /".*?"/g;
// or
// var pat = /"\w*"/;
console.log(str.match(pat));
9.補(bǔ)全如下正則表達(dá)式虏杰,輸出字符串中的注釋內(nèi)容. (可嘗試使用貪婪模式和非貪婪模式兩種方法)
str = '.. <!-- My -- comment \n test --> .. <!----> .. ';
//re = /<!--[\w\W]*?-->/g; 非貪婪模式
re = /<!--[^>]*-->/g //貪婪模式
console.log(str.match(re)); // '<!-- My -- comment \n test -->', '<!---->'
10.補(bǔ)全如下正則表達(dá)式
var re = /<[^>]+>/g //貪婪模式
var str = '<> <a href="/"> <input type="radio" checked> <b>'
console.log(str.match(re));// '<a href="/">', '<input type="radio" checked>', '<b>'