正则表达式

匹配(test):

特殊意义的元字符:

reg.test():匹配     reg.exec():捕获

^:以...作为开头

$:以...作为结尾

  • :匹配任意字符

\: 表示转义,有特殊意义转为普通意义 ,

\d:匹配任意一个非\n数字(只能是一个数字)

\w:匹配数字字母下划线

\b:匹配边界(注意:开头  结尾  空格 换行 都是边界)

\n:匹配换行

\s:匹配一个空白符(通常都是空格和换行)

量词元字符:

*:出现0次或者多次

+:出现1次或者多次

?:出现0次或者1次

{n}:出现n次

{n,}:至少出现n次

{n,m}:出现次数在n到m次

例:匹配手机号:/^1\d{10}$/    匹配零点几的小数:/^0\.+$/

特别的:[ ]:有特殊意义的元字符进入到[ ]中就变成了本身的意义

如: /[xyz]/:表示匹配x y z中的任意一个

/x|y/:x或者y中的任意一个

/[a-z]/:a-z中任意一个   (注意 - 的左右问题,要按顺序!)

/[^xyz]/:除了xyz中任意一个字符( ^ 与  [ ] 搭配表示  除了)

捕获(exec):

正则表达式捕获的懒惰性:在找到一个匹配的内容时,就停止了捕获查找

解决懒惰性的方法:给正则表达式加一个全局修饰符g。虽然解决了懒惰性,但是exec一次只能捕获一次,所以只能一次一次的进行捕获,直到结果为null,就全部捕获到想要的内容。

var reg=/a\d/g;
var str="aaaaa1ba25555a3";
//    console.log(reg.exec(str));
//    console.log(reg.exec(str));
//    console.log(reg.exec(str));
//    console.log(reg.exec(str));

 我们可以自己写一个while循环把捕获到的内容都放到一个数组中:

var ary=[];
var val=reg.exec(str);
while (val){
    ary.push(val[0]);
    val=reg.exec(str);
}
console.log(ary);

 在字符串中提供了match方法,可以一次性捕获到所有符合条件的内容:

var reg=/\d{2}/g;
var str="js12css34HTML56";
console.log(str.match(reg));   //["12", "34", "56"]

分组捕获:

如果想单独捕获到内容,可以使用小括号将需要捕获到的内容括起来,不过不想捕获到某部分内容,可以在小括号中最前面加入?:即可   (?:  )

var str = "html:1000+css:1000+js:10000+vue:1000+react:1000+node:1000";
var reg = /(?:^|\+)([a-z]{2,5}:(\d+))/g;
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));

注意:正则加上g,使用match方法不会捕获到分组内容

正则捕获的贪婪性:当出现量词元字符时,按照最大长度来捕获内容,要想解决贪婪性,在量词元字符后面加一个?即可

//贪婪性
var reg = /\d+/g;
console.log(reg.exec("123asdfgh45d4567d"));//123
console.log(reg.exec("123asdfgh45d4567d"));//45
console.log(reg.exec("123asdfgh45d4567d"));//4567
var reg = /\d+?/g;
console.log(reg.exec("123asdfgh45d4567d"));  //1
console.log(reg.exec("123asdfgh45d4567d"));  //2
console.log(reg.exec("123asdfgh45d4567d"));  //3

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值