一、什么是正則姻采?
正則就是規(guī)則,一種能夠讓計(jì)算機(jī)讀懂的規(guī)則。正則最初的概念是由Unix的sed慨亲、grep等命令普及的婚瓜,一個(gè)正則表達(dá)式是一個(gè)pattern(模式),它通常用來(lái)匹配符合某種規(guī)則的字符串刑棵。
舉個(gè)例子巴刻,小B要辦一個(gè)酒會(huì),但是參加酒會(huì)的人必須符合以下幾個(gè)規(guī)則蛉签,1胡陪、年齡在18-25歲,2碍舍、熱愛(ài)生活和游戲柠座。來(lái)參加酒會(huì)的人必須要滿足這兩個(gè)條件,這兩個(gè)規(guī)則就相當(dāng)于一個(gè)正則表達(dá)式片橡,符合了這個(gè)正則表達(dá)式就等于說(shuō)妈经,ok,你被選中了捧书,就是你了吹泡。
二、正則的寫法
全稱RegExp: var re = new RegExp();
簡(jiǎn)寫:var re = //; //盡量不要為空
三经瓷、正則的規(guī)則
1爆哑、當(dāng)正則需要傳參的時(shí)候,一定要使用全稱的寫法
2舆吮、在引號(hào)內(nèi)揭朝,如果要輸出特殊字符,要多加一個(gè)\
var s = 'asd';
var re = new RegExp('\\w');
console.log(re.test(s)) // true
var re1 = new RegExp('\w');
console.log(re1.test(s)) // false
var re2 = /\w/;
console.log(re2.test(s)) // true
3歪泳、正則默認(rèn)區(qū)分大小寫萝勤,若不區(qū)分大小寫,則應(yīng)在正則最后加上小寫" i "
eg:
var re = /\d/i;
var re = new RegExp('\\d','i');
4呐伞、正則默認(rèn)匹配成功就結(jié)束敌卓,不會(huì)繼續(xù)匹配,若要全部查找伶氢,要加標(biāo)識(shí)g(全局匹配
eg:
var re = /\d/g;
var re = new RegExp('\\d','g');
四趟径、方法
1、test:正則去匹配字符串癣防,匹配成功返回true蜗巧,失敗false
寫法:正則表達(dá)式.test(字符串)
var str = 'test'
var re = /\w/; // \w代表字符,有字符就能夠匹配成功蕾盯,當(dāng)前匹配到了t
console.log(re.test(str)) // true
2幕屹、search:正則去匹配字符串,匹配成功返回位置,失敗返-1
寫法:字符串.search(正則)
var str = 'search';
var re = /a/;
console.log(str.search(re)) // 2
3望拖、match:正則去匹配字符串渺尘,匹配成功返成功的數(shù)組,失敗返null
寫法:字符串.match(正則)
var str = 'asdaf7a8saxahsda9duasxa3';
var re = /\d/g;
console.log(str.match(re)) // [ '7', '8', '9', '3' ]
4说敏、replace:正則去匹配字符串鸥跟,匹配成功的字符去替換新的字符串
寫法:字符串.replace(正則,新的字符)
第二個(gè)參數(shù)可以是字符串盔沫,也可以是回調(diào)函數(shù)
str.replace(re医咨,function(s){
函數(shù)的第一個(gè)參數(shù)就是匹配成功的字符
})
五、匹配子項(xiàng)
小括號(hào)()
: 除了匹配子項(xiàng)的意思架诞,還有分組的意思
var str = '2017-10-10';
var re = /(\d-)+/g;
str.replace(re, ($0) => { // $0表示當(dāng)前匹配到的元素
console.log($0) //依次打印 7- 0-
})
正則的整體叫做母親拟淮,把左邊第一個(gè)小括號(hào)里面的正則,叫做這個(gè)第一個(gè)子項(xiàng)(母親的第一個(gè)孩子侈贷,第二個(gè)小括號(hào)就是第二個(gè)孩子)
整體:re = /(\d+)(-)/g;
var str = '2017-10-10';
var re = /(\d+)(-)/g;
str.replace(re, ($0, $1, $2) => { // $0表示當(dāng)前匹配到的元素
// 第一個(gè)參數(shù)$0:母親惩歉,即2017-或者10-
// 第二個(gè)參數(shù)$1:第一個(gè)子項(xiàng),即2017或者10
// 第三個(gè)參數(shù)$2:第二個(gè)子項(xiàng)俏蛮,即-
console.log($0, $1, $2) //依次打印2017- 2017 - 和 10- 10 -
})
六撑蚌、字符類:一組相似的元素
[]
中的整體代表一個(gè)字符
var str = 'abdc'
var re = /a[bef]d/;
console.log(re.test(str)) // true
排除:^如果寫在[]里面的話,代表排除的意思
范圍:[a-d] a到d這個(gè)范圍
var str = 'abdc'
var re = /a[a-z0-9A-Z]d/;
console.log(re.test(str)) // true
七搏屑、常見(jiàn)轉(zhuǎn)義字符
. 任意字符
. 真正的點(diǎn)
\n 換行
\r 制表
\t 回車
\s 空格
\S 非空格
\d 數(shù)字
\D非數(shù)字
\w 字符
\W 非字符
\b 獨(dú)立的部分(起始争涌,結(jié)束,空格)
\B 非獨(dú)立的部分
字符:字母辣恋、數(shù)字亮垫、下劃線三類都稱為字符
\1 重復(fù)的第一個(gè)子項(xiàng) var re = /(a)(b)(c)/1/2/; // /1代表a
\2 重復(fù)的第二個(gè)子項(xiàng) var re = /(a)(b)(c)/1/2/; // //2代表b
八、量詞:{}
{4,7}
: 前面的字符最少出現(xiàn)4次伟骨,最多出現(xiàn)7次
{4,}
: 最少出現(xiàn)4次
{4}
: 正好出現(xiàn)4次
+
: 相當(dāng)于{1,}
?
: 0次或者1次 {0,1}
*
: 至少出現(xiàn)0次 {0,}
九饮潦、其他
^
: 代表正則最開(kāi)始的位置
$
: 代表正則結(jié)束的位置
var str = 'abdc'
var re = /^a.+c$/;
console.log(re.test(str)) // true
|
: 或的意思
var str = 'abdc'
var re = /^(a|e)/;
console.log(re.test(str)) // true