JavaScript正则表达式笔记


正则表达式

正则表达式介绍

作用:判断字符串是否符合规则

正则中分为两个部分,一个是正则匹配内容,另一个是修饰符部分

支持正则的字符串方法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

(0)
上一篇 2022年7月9日
下一篇 2022年7月9日

相关推荐

发表回复

登录后才能评论