2019独角兽企业重金招聘Python工程师标准>>>

在我们的前端里面,经常会用到正则表达式进行检索字符串,刚好javascript里面提供RegExp来支持正则表达式,而RegExp对象的主要方法是exec()。

语法

RegExpObject.exec(string)
参数 描述
string 必需。要检索的字符串。

返回值:

返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

说明:

exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。

如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。

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

我们现在主要来看说明里面的第三段的内容,

看个例子:

<html>
<body>
<script type="text/javascript">
var str = "Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","g");
var result;
while ((result = patt.exec(str)) != null)  {document.write(result);document.write("<br />");document.write(patt.lastIndex);document.write("<br />");}
document.write(patt.lastIndex);
</script>
</body>
</html>

运行结果如下:

W3School
14
W3School
24
0

可以看到在全局模式lastIndex会一直增加,直到遍历该字符串所有的字符,最后变为0,

所以有一个要注意的是,

如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0

示例如下:

var str = "Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","g");
var result;result=patt.exec(str);document.write(result);document.write("<br />");document.write(patt.lastIndex);document.write("<br />");
var aa="W3School sfd sfsf"
var ddResult;ddResult= patt.exec(aa);document.write(ddResult);

结果如下:

W3School
14
null

之所以最后一个输出结果为null,是由于第一次匹配的结果的lastIndex变为14了。再去检索第二个字符串的时候会从14的位置开始,把前面13个字符去跳过去了,所以找不到,我们要想其从头看是,只需要在检索第二个字符串的开头,让其LastIndex置为0

结果就会为:

W3School
14
W3School

但这只是全局的才有这个问题,局部的话,没有这个问题,可以把上面的例子的全局的去掉,就可以得到

var str = "Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","");
var result;result=patt.exec(str);document.write(result);document.write("<br />");document.write(patt.lastIndex);document.write("<br />");
var aa="W3School sfd sfsf"
var ddResult;ddResult= patt.exec(aa);document.write(ddResult);

运行的结果如下:

W3School
0
W3School

转载于:https://my.oschina.net/u/1540325/blog/486435

javascript里面RegExp的exec函数的总结相关推荐

  1. python exec函数_Python3 exec 函数

    Python3 exec 函数 描述 exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码. 语法 以下是 exec 的语法: ex ...

  2. 深入理解javascript中的立即执行函数(function(){…})()

    2019独角兽企业重金招聘Python工程师标准>>> javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各 ...

  3. exec函数组六个函数的用法和区别

    exec函数组有六个函数,分别是: #include <unistd.h> extern char **environ; int execl(const char *path, const ...

  4. 8.10 exec函数

    8.10 exec函数 用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其m a i n函数开始执行.因 ...

  5. 实例分析exec函数

    fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间.堆.栈等资源的副本.注意,子进程持有的是上述存储空间的"副本&quo ...

  6. exec函数介绍(整理)(附带:操作系统实验一:进程控制实验 代码)

    (1)exec函数说明 fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法.它可以根据指定的 ...

  7. JavaScript中的立即执行函数

    原文链接 通常我们声明一个函数有以下几种方式: // 声明函数f1 function f1() {console.log("f1"); } // 通过()来调用此函数 f1();/ ...

  8. linux exec 二程序,二十五、Linux 进程与信号---exec函数

    25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...

  9. system函数 与 exec函数的区别

    exec家族一共有六个函数,分别是:(1)int execl(const char *path, const char *arg, ......);(2)int execle(const char * ...

最新文章

  1. Android环境搭建和Android HelloWorld—Android开发环境搭建
  2. ++,--运算符的使用
  3. 【Coursera】经验风险最小化
  4. 内存管理相关【内存布局内存管理方案】
  5. 如何设计一个 RPC 系统
  6. jquery 初步学习
  7. 微信小程序分享朋友圈功能
  8. 自动驾驶中的滞后碰撞检测(lazy-collision-checking)
  9. 模板使用自定义类型_自定义虚幻图表_拓展蓝图功能
  10. cognos报表制作(三)Cube开发
  11. KaTeX|LaTeX数学公式编辑手册
  12. Android浏览器速度测试,四大Android手机浏览器 上网速度实测比较
  13. google已经启用www.guge.com(谷歌)域名
  14. python中的三元表达式
  15. 怎样解决问题 《how to slove it》 《在代码大全里》
  16. U盘图标改变与文件隐藏
  17. Java 读取Word标题(目录)
  18. android音量键调节听筒音量的大小
  19. 机电一体化基础知识及实训QY-JDYT01
  20. 试题B:灭鼠先锋[博弈]

热门文章

  1. Linux拷贝数据死机了,Linux系统“死机”时怎么办?
  2. python3 zipfile_python3中zipfile模块的常用方法
  3. android studio不自动生成r.java_Android 添加构建依赖
  4. Java学习总结:47(打印流)
  5. ie8加载js太慢_js ie8 慢
  6. Error:java: 无效的源发行版: 11
  7. Android架构篇-5 CI/CD(持续集成、持续交付、持续部署)
  8. java中super用来定义父类,Java中super的几种用法及与this的区别
  9. 8 iOS中KVO 的本质
  10. 【iOS官方文档翻译】iOS的蓝牙连接、数据接收及发送