• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Javascript中使用exec进行正则表达式全局匹配时的注意事项
    本文就是介绍在使用 Javascript 中使用 exec 进行正则表达式全局匹配时的注意事项。
    先看一下常见的用法:
    复制代码 代码如下:

    script type="text/javascript">
    var pattern = /http:\/\/([^\/\s]+)/;
    alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn
    alert(pattern.exec('http://YITU.org')); // http://YITU.org,YITU.org
    // 也可以直接写成 /http:\/\/([^/]+)/.exec('http://www.codebit.cn');
    /script>

    接下来看一下全局模式下的诡异事件:
    复制代码 代码如下:

    script type="text/javascript">
    var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符
    alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn
    alert(pattern.exec('http://YITU.org')); // 并没有返回期望的 http://YITU.org,YITU.org ,而是返回了 null
    /script>

    第二个语句并没有返回期望的结果,而是返回了 null ,这是因为:
    在全局模式下,当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把正则表达式对象的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
    下面是正常的全局模式下的匹配方式:
    复制代码 代码如下:

    script type="text/javascript">
    var pattern = /http:\/\/([^\/\s]+)/g;
    var str = "CodeBit.cn : http://www.codebit.cn | YITU.org : http://YITU.org";
    var result;
    while ((result = pattern.exec(str)) != null) {
    alert("Result : " + result + " LastIndex : " + pattern.lastIndex);
    }
    //Result : http://www.codebit.cn,www.codebit.cn LastIndex : 34
    //Result : http://YITU.org,YITU.org LastIndex : 67
    /script>

    从上面的代码我们可以看到,之所以出现第二段代码中的问题,影响因素是 lastIndex ,所以我们可以通过将 lastIndex 手动置 0 的方式来解决这个问题。
    复制代码 代码如下:

    script type="text/javascript">
    var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符
    alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn
    pattern.lastIndex = 0;
    alert(pattern.exec('http://YITU.org')); // http://YITU.org,YITU.org
    /script>

    总结:
    在全局模式下,如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
    您可能感兴趣的文章:
    • Javascript中正则表达式的全局匹配模式分析
    • JS中正则表达式全局匹配模式 /g用法详解
    上一篇:正则表达式 匹配至少有一个非空白字符并且不超过指定长度
    下一篇:js用正则表达式控制价格输入实现代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Javascript中使用exec进行正则表达式全局匹配时的注意事项 Javascript,中,使用,exec,进行,