正则表达式
正则表达式介绍
作用:判断字符串是否符合规则
正则中分为两个部分,一个是正则匹配内容,另一个是修饰符部分
支持正则的字符串方法search(),match(),split(),replace()
创建方式
-
字面量创建
- 构建函数创建
var reg=/a/g;// /这里面就是正则匹配内容a/修饰符部分g var reg=new RegExp("a","g");
正则内容
修饰符
i 不区分大小写
g 全局 从头查找到尾部
m 匹配多行
var str="abacA"; console.log(str.replace(/a/,"z"));//zbacA 第一个a替换成z console.log(str.replace(/a/g,"z"));//zbzcA 全局替换,所有a替换成z console.log(str.replace(/a/gi,"z"));//zbzcz 全局不区分大小写,所有a和A替换成z
正则方法
reg.exec()
查找字符串中满足正则匹配内容的结果,并且返回一个数组, 这个数组只有一个元素,包括几个属性,分别是群组,索引,字符串自身,未查找到返回false
var str="abc"; console.log(/a/.exec(str)); //['a', index: 0, input: 'abc', groups: undefined]
reg.test()
判断字符串是否满足正则匹配内容,满足返回true,否则返回false
var str="abad"; console.log(/a/.test(str));//true console.log(/c/.test(str));//false
字符串方法
str.search();
按照正则表达式查找字符串中的内容,返回优先查找到第一个元素下标
var str="abcadbs"; console.log(str.search(/a/g)); // 0
str.split();
按照正则表达式匹配内容切割字符串
var str="abcdebca"; var arr=str.split(/e/); var arr1=str.split(/c/); console.log(arr,arr1);// ['abcd','bca'],['ab','deb','a']
str.replace();
按照正则表达式匹配内容进行替换,可以替换成相同的也可以替换成不同的
var str="abcaced"; str.replace(/a/g,"z"); console.log(str);// zbczced var str="abcaced"; str=str.replace(/a/g,function(item,index){ return index===0 ? "z" : "f"; }); console.log(str);//zbcfced 第一个a替换成z第二个替换成f
**str.match();**
按照正则表达式匹配内容返回数组
如果不加全局,可以达到exec的目的
如果加有全局匹配,就会只返回找到的所有元素数组
如果加有群组,但是不加全局,则除返回找到的元素外,还返回群组的元素
var str="abcbasc"; var arr=str.match(/a/g); var arr1=str.match(/(ab)/); console.log(arr);//['a','a']; console.log(arr1); // ['ab', 'ab', index: 0, input: 'abcaced', groups: undefined]
正则中特殊符号
元字符 . 可以匹配任意一个字符
转义符 / 将有特殊含义的符号转义成普通字符
console.log("cetcotcat".match(/c.t/g));//['cet','cot','cat'] console.log("cetc.tcat".match(/c/.t/g));// ['c.t']/.转义为字符串.
[]里面内容可以任意匹配一个字符
/[ab]/.test("abc");//[ab]表示匹配a或者b其中任意一个 /[0-9]/ //匹配数字0到数字9 /[a-z]/ //匹配小写字母a到z /[01][0-9]/ //表示匹配0-19
反义字符^
在[]中第一位使用^,表示除了^后面的字符外都满足,在外面使用表示开始
console.log(“abcafcadcaec”.match(/a[^f]c/g));
//中间不要f [‘abc’,’adc’,’aec’]
console.log(“abcafcadcaec”.match(/a[f^a]c/g))
//^如果在[]不是第一位,就表示字符^ [‘afc’]
转义特殊字符
[a-zA-Z0-9_] /w 表示数字字母与下划线
[^a-zA-Z0-9_] /W 表示非数字字母与下划线
[0-9] /d 表示数字
[^0-9] /D 表示非数字
/s 表示空白字符
/S 表示非空白字符
空白字符就用空格隔开的 空字符就是”” ,”ab”两个字符之间夹得就是空字符
重复 {}
{} 里面写数字表示重复几次可以为0表示匹配空字符
console.log(/(abc){2}/.test("abcabc"));//true ()表示群组视为一个,表示abc重复2次 console.log(/abc{2}/.test("abcabc"));//false 这里表示c重复2次 console.log(/(abc){2,3}/.test("abcabc"));//true 表示重复2-3次
? {0,1} 重复0-1次 + {1,} 重复1次以上 *{0,} 重复0次以上
或者 |
或者,可以用来匹配多个字符或者另外得字符,优先匹配|前面的内容
console.log("catdogcetdag".match(/cat|dog/g)); //['cat', 'dog'] console.log("abcdef".match(/a||b/g)); //如果|得一端没有内容,则认为匹配空字符
起始 ^
/^[0-9]/ //起始为0-9数字
结束 $
/[0-9]$/ //结束为0-9数字
群组()
// $1就是第一个群组,$2就是第二个群组,$3就是第三个群组 var str="18617891076".replace(/(/d{3})(/d{4})(/d{4})/,"$1****$3"); console.log(str);//186****1076
贪婪匹配
贪婪匹配:先匹配最大的,再匹配小的
console.log("caaaaatcbbbbt".match(/c.{4,5}t/g)); //['caaaaat', 'cbbbbt'] console.log("aaaaaaaaaa".match(/a{2,4}/g)); //['aaaa','aaaa','aa'] 优先匹配4个的 再匹配2个的
非贪婪匹配
/.*?/
console.log("aaaaaaaa".match(/a{2,5}?/g)); //['aa', 'aa', 'aa', 'aa'] 先匹配小的,重复2次的 console.log("aaaaaaaa".match(/a{2}/g)); //['aa', 'aa', 'aa', 'aa'] console.log("caaaaatcbbbbt".match(/c.*?t/g)); //['caaaaat', 'cbbbbt']
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/272534.html