正则表达式的使用exec和match的却别

javascript基础快速入门视频教程
https://edu.csdn.net/course/detail/32172
正则表达式的使用,exec和match的却别

 var reg = /javascript/i;
    var str = '前端语言JavaScript很简单。'

    //使用字符串自带的方法
    console.log(str.search('javascript'));
    //在search方法中参数为字符串,输出为-1,因为有大小写所以没有找到
    console.log(str.search(reg));
    //在search方法中参数为正则表达,输出为4,通过正则表达式进行查询,可以找到


    console.log(str.match('javascript'));
    //在match方法中参数为字符串,输出为null,因为有大小写所以没有找到
    console.log(str.match(reg));
    //在match方法中参数为正则表达,返回值为匹配上的字符串的数组,不但返回结果数组,还给数组增加了两个属性
    //index属性,标识检索到的字符串的位置,input标识输入的字符串

    /*
   如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
   如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,
   其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,
   而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,
   返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,
   input 属性声明的是对 stringObject 的引用。
   */
    var reg2 = /javascript/gi;
    var str2 = '前端语言JavaScript很简单。javascript'
    console.log(str.match(reg2));
    /*
    如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。
    若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。
    不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,
    而且也没有 index 属性或 input 属性。
    */



    console.log(str.replace('javascript', 'js'));
    //在replace方法中参数为字符串,没有替换成功,因为有大小写,所以找不到对应的字符,所以没有替换
    console.log(str.replace(reg, 'js'));
    //在replace方法中参数为正则表达式,替换成功,通过正则表达式进行查询,可以找到,可以成功替换

//使用正则表达式的对象方法

    console.log(reg.test(str));
    //检查str中是否有reg代表的字符串,有返回true,没有放回false,是正则表达式最常用的方法
    console.log(reg.exec(str));
    //检索str中的reg代表的字符串,返回字符串数组
    console.log(reg.exec(str)[0]);
    //获取检索到的第一个字符串
    console.log(reg.exec(str).index);
    //exec的返回值,不但返回结果数组,还给数组增加了两个属性
    //index属性,标识检索到的字符串的位置,input标识输入的字符串
    console.log(reg.exec(str).input);


    //如果正在表达式是一个全局正则表达式的时候,例如reg2,也就是表达式有参数g的时候
    console.log(reg2.exec(str2));
    console.log(reg2.exec(str2));
    /*但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。
    它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。
    当 exec() 找到了与表达式相匹配的文本时,在匹配后,
    它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。
    这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。
    当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
    */

    //循环输出所有字符
    reg2.lastIndex = 0;
    while ((result = reg2.exec(str2)) != null) {
        console.log(result);
        console.log(reg2.lastIndex);

    }

    //验证用户名是否为字母、数组、下划线8位到20位长度
    var reg3 = /^\w{8,20}$/;
    var userName = document.getElementsByName("userName")[0];
    userName.onblur = function () {
        var userNameError = document.getElementsByName("userNameError")[0]
        if (reg3.test(userName.value)) {
            userNameError.innerHTML = "";
        }
        else {
            userNameError.innerHTML = "验证用户名为字母、数组、下划线组成的8位到20位字符";
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大壮老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值