正则表达式的使用及方法详解区分

主要内容:

正则表达式常用的元字符
正则表达式常用的表达式模板
js正则表达式使用方法
正则分组的用法
字符串匹配 string.match和regexObj.exec方法的区别
字符串的替换


1、常用元字符:

地址链接

\d 匹配数字
\D 匹配非数字(包括换行空格,!号等)
\w 匹配字母、数字、下划线
\W 匹配非字母、数字、下划线(可以匹配换行,空格)
. 匹配除换行符(\n、\r)之外的任何单个字符
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
? 匹配前面的子表达式零次或一次
[\u4e00-\u9fa5] 匹配汉字


2、常用匹配表达式模板:

常用匹配表达式模板地址链接
1、验证手机号码 十一位数字: ^\d{11}$
2、匹配年月日:XXXX-XX-XX类型 \d{4}-\d{1,2}-\d{1,2} (再精确一点加上^$)
3、验证邮箱:如xxx@sina.com.cn ^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
正则表达式在线测试工具


3、js中使用正则表达式:

(1)使用new RegExp(正则表达式)创建一个正则对象,
(2)使用 /正则表达式/ 创建正则对象
例子:

    //---------------第一种方法:----------------------
    //匹配含有abX的字符串且忽略大小写
    var expression=new RegExp('ab[a-z]','i');
    var str='aBc';
    //使用正则表达式的test方法匹配到结果返回true否则返回false
    console.log(expression.test(str));
    //---------------第二种方法:----------------------
    var expression2=/ab[a-z]/i;
    var str2='afh';
    //返回false
    console.log(expression2.test(str2));

4、正则分组()的用法:
下面例子中正则表达式匹配了年月日的格式,其中年、月、日分别被()包裹起来被分成三组,当使用正则对象方法进行匹配时匹配捕获到的字符串会被暂存起来,一个分组对应的顺序从1 开始编号,可以使用RegExp.$1来获取第一个分组匹配到的数据。

var str1="2019-9-24";
var reg=/(\d{4})-(\d{1,2})-(\d{1,2})/g;
var arr1=reg.exec(str1);
console.log(RegExp.$1 + "-----" + RegExp.$2 + "----" + RegExp.$3);

输出结果为:2019-----9----24


5、获取匹配结果的方法,string.match(regeExp)和regexObj.exec(str)方法的区别:
例子1:
获取2019-9-24中年月日对应的数据

    var reg=/(\d{4})-(\d{1,2})-(\d{1,2})/;
    var str1="2019-9-24,2019-1-1";
    console.log('str1.match(reg)方法返回结果:'+str1.match(reg));
    console.log('reg.exec(str1)方法返回结果:'+reg.exec(str1));

此例子使用string.match(regeExp)和regexObj.exec(str)两个方法输出的结果相同,匹配成功即返回数组,数组中第一位为匹配到的字符串,后三位为分组中匹配到的数据。
注意: 当前正则表达式中不是全局匹配
str1.match(reg)方法返回结果:2019-9-24,2019,9,24
reg.exec(str1)方法返回结果:2019-9-24,2019,9,24
例子2:

var reg=/(\d{4})-(\d{1,2})-(\d{1,2})/g;
 var str1="2019-9-24,2019-1-1";
 console.log('str1.match(reg)方法返回结果:'+str1.match(reg));
 console.log('reg.exec(str1)方法返回结果:'+reg.exec(str1));
 console.log(reg.lastIndex);
 console.log('reg.exec(str1)方法返回结果:'+reg.exec(str1));

注意: 当前正则表达式中使用全局匹配模式
修改正则表达式为全局匹配模式,string.match(regeExp)在全局匹配下只返回匹配到的字符串,不再返回与分组表达式匹配的数据。
而regexObj.exec(str)每使用一次只返回匹配到的一个结果,每次都从lastIndex属性指定的字符串位置开始搜索,所以第一次返回从0开始匹配到的字符串和其分组表达式匹配到的字符串,第二次调用从index为9的位置开始匹配。
重要事项:如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
结果如下:
在这里插入图片描述


6、字符串匹配替换:
常用匹配字符串进行替换的两种方法:
1、使用stringObject.replace(regexp/substr,replacement)
2、使用split().join(),先根据匹配的内容分割成字符串数组,再使用要替换的内容拼接成字符串达到替换的效果

//--------------使用分组进行替换,将yyyy-mm-dd替换成mm/dd/yyyy格式----------------------
    var reg=/(\d{4})-(\d{1,2})-(\d{1,2})/g;
    var str1="2019-9-24,2019-1-1";
    var result=str1.replace(reg,"$2/$3/$1");
    console.log("替换后的格式为:"+result);
    //先从有-的位置分割成字符串数组,再使用/进行拼接
    var result2=str1.split('-').join('/');
    console.log(result2);

可以看到第一种方法使用正则表达分组替换可以改变数据的位置,而第二种方法不能,仅是替换的时候两种方法可以达到相同的效果
结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值