正則表達式隘庄,又稱規(guī)則表達式夯到,英語:RegularExpression,在代碼中常簡寫為regex,regexp,RE
作用:快速查找匹配的字符串內(nèi)容
創(chuàng)建正則表達式
1. var reg = new RegExp();
var str = "你NBEST";
var reg = new RegExp('NB');
console.log(reg.test(str)); //true
2.var reg = /N/;
console.log(reg.test(str)); //true
正則常用函數(shù)
1.test()
判斷字符串中是否有符合正則規(guī)則的內(nèi)容,返回值是bool類型
2.exec()
查找到符合正則表達式的字符串所在的源字符串的位置下標
字符串常用的函數(shù)
replace,match,search
match與exec返回值類似摆碉,歸屬不同
正則元字符
1.全局查找g
g:從頭查到尾(影響replace, exec)
var str = "hello";
var reg = /l/;
var val = str.replace(reg,'m');
console.log(val) //hemlo
//全局查找
var str = "hello";
var reg = /l/g;
var val = str.replace(reg,'m');
console.log(val) //hemmo
獲得字符串所有空格個數(shù)
var str = "你 好 嗎 ?";
var reg = / /g;
var val = reg.exec(str);
var val1 = reg.exec(str);
console.log(val)
console.log(val1)
var str = "你 好 嗎 ?";
var reg = / /g;
var num = 0;
while(reg.exec(str)){
num++;
}
console.log(num) //3
2.不區(qū)分大小寫 i
i和g可以共存
//不區(qū)分大小寫
var str = "hello";
var reg = /l/ig;
var val = str.replace(reg,'你好');
console.log(val);
3.任意字符 .
//任意字符
var str = "helloele"
var reg = /e./g; //查找2個字符(連起來的2個字符)翎迁,一個是e,另一個任意
console.log(str.replace(reg,'好')); //h好lo好e
4. 0個或者1個字符 : 净薛?
汪榔?修飾的是前一個字符:前一個字符存在或者不存在
var str = "hello";
var reg = /e?/g;
var val = str.replace(reg,'m');
console.log(val); //mhmmlmlmom
從h之前開始查找,肃拜,e與h之間痴腌,字符與字符之間有一塊區(qū)域(內(nèi)存問題)
5. 代表0個或者n個 : *
*同樣是修飾前一個字符,存在0次或者n次
燃领?士聪,*一般不做替換,做查找
6代表1個或者N個 :+
+修飾前一個字符
var str = 'hello';
var reg = /e.+/g; //e后面跟0個或者多個.
console.log(str.replace(reg,'m')); //hm
7.重復的范圍:{}
修飾{}前面的字符
{3}代表前面的字符必須有連續(xù)的3個
{1,3}代表前面的字符最少有一個猛蔽,最多有3個
{2戚嗅,}代表最少2個,最多n個
var str = "heeeello";
var reg = /e{3}/g;
//var reg = /e{1,3}/g; // hmmllo
/var reg = /e{2,3}/g; //hmello 先判斷最大的數(shù)量枢舶,再判斷最小的
console.log(str.replace(reg,'m')) //hmello
8.或規(guī)則: |
var reg = /h|l/g
9.或規(guī)則:[]
[]里的內(nèi)容不允許有空格懦胞,逗號
空格,逗號會被當成或的一種
var reg = /[hel ]/g
var reg = /[a-z]/g //a到z的所有小寫
var reg = /[a-zA-Z]/g //大小寫
var reg = /[0-9]/g
漢字的正則
var reg = /[\u4e00-\u9fa5]//g //漢字編碼凉泄。包含了所有的漢字
10.以什么開頭:^
var reg = /^he/g; //以he開頭
11.以什么結(jié)尾:$
var reg = /o$/g; //以o結(jié)尾
案例
判斷一個字符串是否是6位長度的數(shù)字
/^[0-9]{6}$/g //加上開頭和結(jié)尾
12.取反規(guī)則 :^
取反規(guī)則要和[]一起用
//去掉非數(shù)字的字符
var str = "123helo%$";
var reg = /[^0-9]/g;
console.log(str.replace(reg,'9')) //123999999
13.小括號規(guī)則
var reg = /(he){3}/g; //he整體出現(xiàn)3次躏尉,{3}修飾的是()括起來的整體
總結(jié)
- 修飾整個正則表達式的內(nèi)容,g和i
- 修飾前一個或者前一個小括號括起來的內(nèi)容后众,胀糜?,+蒂誉,*教藻,{}
- 其他: .右锨,|括堤,[],^,$悄窃, 取反讥电, ()
正則需要多練習
轉(zhuǎn)義字符
特點:以“\”開頭
\n,\d,\w
\d 等價于 [0-9]
\D : [^0-9]
\w : [^A-Za-z0-9_]
練習題
1.連續(xù)2個相同的數(shù)字
2.連續(xù)3個或3個以上 相同的 字符
3.正整數(shù)
4.負整數(shù)
5.整數(shù)
6.正浮點數(shù)
7.負浮點數(shù)
8.浮點數(shù)