0鞋既、\d讳推,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分別是什么?
符號 | 含義 |
---|---|
\d | [0-9] 表示數(shù)字字符 |
\w | [a-zA-Z0-9_] 表示數(shù)字磺送,大小寫字母及下劃線 |
\s | [\t\n\x0B\f\r] 表示空白符 |
[a-zA-Z0-9] | 表示大小寫字母躯泰,數(shù)字字符 |
\b | 表示單詞邊界 |
. | 表示除回車符換行符的所有字符 |
* | 出現(xiàn)0次或多次(任意次) |
+ | 出現(xiàn)1一次或多次(最少出現(xiàn)一次) |
? | 出現(xiàn)0次或1次(最多出現(xiàn)一次) |
x{3} | 表示x字符出現(xiàn)3次 |
^ | 以什么字符做為開頭 |
$ | 以什么字符做為結尾 |
[^abc] | 表示不是abc的所有字符 |
abc{3,5}? | ?在量詞后面表示非貪婪模式栈戳,若字符串匹配厨剪,c取3個 |
(abc){10} | 表示abc字符連續(xù)出現(xiàn)10次 |
abc(?=def) | 匹配后面為def的abc |
1哄酝、RegExp 相關方法
- RegExp.prototype.test(str)
//測試字符串參數(shù)中是否存正則表達式模式,如果存在則返回true
var reg = /\d+\.\d{1,2}$/g;
reg.test('123.45'); //true
reg.test('34.5678'); //false
- RegExp.prototype.exec(str)
//用的不多
//正則表達式模式在字符串中查找祷膳,若找到了匹配的陶衅,返回一個結果數(shù)組,否則返回null
var reg = /\d/g;
var r = reg.exec('a1b2c3');
- String.prototype.search(reg)
//檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串直晨,忽略標志g搀军,返回字符串的第一個匹配的位置
'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1
- String.prototype.match(reg)
//非全局調(diào)用:只能執(zhí)行一次匹配膨俐,返回數(shù)組,第一個元素存放的是匹配文本罩句,第二個元素存放index焚刺,是匹配文本的起始字符在字符串中的位置,第三個元素存放input门烂,是檢索的字符串
var r = 'aaa123456'.match(/\d/); //["1", index: 3, input: "aaa123456"]
//全局調(diào)用:返回數(shù)組乳愉,存放的是字符串中所有的匹配子串,沒有index和input
var r = 'aaa123456'.match(/\d/g); //["1", "2", "3", "4", "5", "6"]
- String.prototype.replace(reg, replaceStr)
//1屯远、string對象的replace方法蔓姚,我們最常用的是傳入兩個字符串的做法,但這種做法有個缺陷慨丐,只能replace一次
// 2坡脐、replace方法的第一個參數(shù)還可以傳入RegExp對象,可以進行全局替換
'abcabcabc'.replace('bc','X'); //aXabcabc
'abcabcabc'.replace(/bc/g,'X'); //aXaXaX
- String.prototype.split(reg)
//和replace方法類似房揭,在一些復雜的分割情況下我們可以使用正則表達式解決备闲。
'a,b,c,d'.split(','); //["a", "b", "c", "d"];
'a1b2c3d'.split(/\d/); //["a", "b", "c", "d"]
2捅暴、寫一個函數(shù)trim(str)浅役,去除字符串兩邊的空白字符
function trim(str){
var reg=/(^\s+|\s+$)/g;
return str.replace(reg,"");
}
var result=trim(" 345");
var result1=trim("\nabs");
3、寫一個函數(shù)isEmail(str)伶唯,判斷用戶輸入的是不是郵箱
function isEmail(str){
var reg=/\w+@[0-9a-zA-Z]+[.][a-z]+/g;
return reg.test(str);
}
var result1=isEmail("234@qq.com");
var result2=isEmail("abc@123.123");
4、寫一個函數(shù)isPhoneNum(str)惧盹,判斷用戶輸入的是不是手機號
function isPhoneNum(str){
var reg=/^1\d{10}$/g;
return reg.test(str);
}
var result1=isPhoneNum("1205425879a");
var result2=isPhoneNum("12457896312a");
var result3=isPhoneNum("12012456789");
5乳幸、寫一個函數(shù)isValidUsername(str),判斷用戶輸入的是不是合法的用戶名(長度6-20個字符钧椰,只能包括字母粹断、數(shù)字、下劃線)
function isValidUsername(str){
var reg=/^\w{6,20}$/g;
return reg.test(str);
}
var result1=isValidUsername("ast");
var result2=isValidUsername("astsdg/n");
var result3=isValidUsername("astsd/n");
var result4=isValidUsername("astsdg");
var result5=isValidUsername("astsdgastsdgastsdgsd");
6嫡霞、寫一個函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長度6-20個字符瓶埋,只包括大寫字母、小寫字母诊沪、數(shù)字养筒、下劃線,且至少包括兩種)
function isValidPassword(str){
if(!/^\w{6,20}$/.test(str)) return false;
if(/^\d{6,20}$/.test(str)|/^[a-z]{6,20}$/.test(str)|/^[A-Z]{6,20}$/.test(str)|/^_{6,20}$/.test(str)) return false;
return true;
}
var result1=isValidPassword("abretedggdfgfg");
var result2=isValidPassword("456456dfgdfg");
var result3=isValidPassword("____________");
7端姚、寫一個正則表達式晕粪,得到如下字符串里所有的顏色
var re = /(#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})(?=;))/g
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log(subj.match(re)) // ['#121212', '#AA00ef']
8、下面代碼輸出什么? 為什么? 改寫代碼渐裸,讓其輸出[""hunger"", ""world""].
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;
str.match(pat);
輸出[""hunger" , hello "world""]
原因:因為.表示除了回車符和換行符的所有字符巫湘,代表出現(xiàn)0次或多次装悲,而且后面沒有?尚氛,說明是貪婪模式诀诊,是竟可能多的匹配,g代表全局搜索阅嘶,所以得到這結果
var str = 'hello "hunger" , hello "world"';
var pat = /".*?"/g; //?表示非貪婪模式的匹配属瓣,匹配中用盡可能少的次數(shù)去匹配,所以得到不同結果
str.match(pat);
(mission 7)