javascript里面RegExp的exec函数的总结

news/2024/7/4 11:36:38

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

       在我们的前端里面,经常会用到正则表达式进行检索字符串,刚好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


http://lihuaxi.xjx100.cn/news/246278.html

相关文章

详解zabbix中文版安装部署

一、zabbix简介&#xff08;摘自百度百科&#xff09;zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供柔软的通知机制以让系统管理员快速定位/解决存在…

C++关键字register

这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中&#xff0c;而不是通过内存寻址访问&#xff0c;以提高效率。注意是尽可能&#xff0c;不是绝对。你想想&#xff0c;一个CPU 的寄存器也就那么几个或几十个&#xff0c;你要是定义了很多很多register 变量&#xff0c;…

P4269 [USACO18FEB]Snow Boots G

思维题。 以地板为序构造链表&#xff0c;再排序&#xff0c;然后删除走不过去的地面。 删除的时候顺便维护最大的跨度&#xff0c;以此判断可行性。 总的来说利用了答案的单调性。 #include <cstdio> #include <cstring> #include <iostream> #include <…

怎样将jpg转换成pdf软件

为什么80%的码农都做不了架构师&#xff1f;>>> 怎样将jpg转换成pdf软件 序言&#xff1a; 企业或个人通常会遇到设备终端软件的兼容性和支持性问题&#xff0c;比如&#xff0c;JPG转PDF文本&#xff0c;这给等于给用户设置了一个门槛&#xff0c;遇到需要将JPG转换…

安装Macports遇到的问题和PATH设置

2019独角兽企业重金招聘Python工程师标准>>> 安装Macports后&#xff0c;再输入port&#xff0c;发现无法使用。 然后下源码来编译&#xff0c;发现要设置PATH。咋设置呢&#xff0c;网上找的攻略看下面。 缺省的Macports安装在了/opt/local/bin下头。 执行&#xf…

C++关键字const和mutable

1. const const是constant的缩写&#xff0c;意为常用&#xff0c;它有以下几个作用 1.1. 修饰变量 1.1.1. const修饰普通变量 const int a 10; const修饰了int&#xff0c;表示这段代码定义的变量&#xff0c;最后取的是int型且值为10&#xff0c;不可被后面的代码修改。…

Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

Python机器学习实践指南 目 录 第1章Python机器学习的生态系统 1 1&#xff0e;1 数据科学/机器学习的工作 流程 2 1&#xff0e;1&#xff0e;1 获取 2 1&#xff0e;1&#xff0e;2 检查和探索 2 1&#xff0e;1&#xff0e;3 清理和准备 3 1&#xff0e;1&#xff0e;4 建模…

jquery autocomplete实现solr查询字段自动填充并执行查询

2019独角兽企业重金招聘Python工程师标准>>> 页面引入三个JS&#xff1a; <script type"text/javascript" src"js/jquery-1.7.2.js"></script> <script type"text/javascript" src"js/jquery-ui.js">&l…