JS编程建议——43:使用exec增强正则表达式功能

简介: 43:使用exec增强正则表达式功能

建议43:使用exec增强正则表达式功能
RegExp对象定义了两个用于执行模式匹配操作的方法,它们的行为与String对象的正则表达式操作方法类似。例如,RegExp对象的exec方法与String对象的match方法相似,只不过exec是以字符串为参数的RegExp对象方法,而match方法是以正则表达式为参数的String对象方法。在非全局模式下,它们的返回值是相同的。
在所有RegExp模式匹配方法和String模式匹配方法中,exec方法的功能最强大。作为正则表达式的通用匹配方法,exec方法比RegExp.test()、String.search()、String.replace()和String.match()都复杂。该方法需要一个参数,用来执行要执行操作的字符串并返回一个数组,此数组中存放的是匹配结果。如果没有找到匹配的文本,返回值为null。例如:
var s = "javascript";
var r = /java/g;
var a = r.exec(s); //["java"]
exec方法的工作机制是这样的:当调用方法时,先检索字符串参数,从中获取与正则表达式相匹配的文本。如果找到了匹配的文本,就会返回一个数组;否则,返回null。对返回数组的元素的具体说明如下:
第0个元素,是与表达式相匹配的文本。
第1个元素,是与正则表达式的第1个子表达式相匹配的文本(如果存在)。
第2个元素,是与正则表达式的第2个子表达式相匹配的文本,依此类推。
返回数组还包含几个属性,具体说明如下:
length,该属性声明的是数组中的元素个数。
index,该属性声明的是匹配文本的第一个字符的位置。
input,该属性包含的是整个字符串。
当调用非全局模式的正则表达式对象的exec方法时,返回的数组与调用字符串对象的match方法返回的数组是完全相同的。
当执行全局匹配模式时,exec的行为就略有变化。这时它会定义lastIndex属性,以指定下一次执行匹配时开始检索字符串的位置。在找到了与表达式相匹配的文本之后,exec方法将把正则表达式的lastIndex属性设置为下一次匹配执行的第一个字符的位置。也就是说,可以通过反复地调用exec方法来遍历字符串中的所有匹配文本。当exec再也找不到匹配的文本时,将返回null,并且把属性lastIndex重置为0。
在下面的这个示例中,定义正则表达式直接量,用来匹配字符串s中每个字符。在循环结构的条件表达式中反复执行匹配模式,并将返回结果的值是否为null作为循环条件。当返回值为null时,说明字符串检测完毕。然后,读取返回数组a中包含的匹配子字符串,并调用该数组的属性index和lastIndex,其中index显示当前匹配子字符串的起始位置,而lastIndex属性显示下一次匹配操作的起始位置。例如:
var s = "javascript"; // 测试使用的字符串直接量
var r = /w/g; // 匹配模式
while((a = r.exec(s)) != null){ // 循环执行匹配操作

alert(a[0] + "\n" + a.index  + "\n" +  r.lastIndex); /* 显示每次匹配操作时返回的结果数组信息*/

}
实际上通过循环结构反复调用exec方法是唯一获得全局模式的完整模式匹配信息的方法。
无论正则表达式是否为全局模式,exec方法都会将完整的细节添加到返回数组中。字符串对象的match方法就不同,它在全局模式下返回的数组中不会包含这么多的细节信息。

相关文章
|
6天前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
102 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
14天前
|
JavaScript 前端开发 IDE
【编程向导】Js与Ts差异详解:选择与权衡
JavaScript 一直是 Web 开发的基石,以其灵活性和动态性著称,但其松散类型可能导致大型项目中出现难以调试的错误。TypeScript 作为 JavaScript 的超集,通过引入静态类型系统,提供了更高的类型安全性和更好的工具支持,尤其适合大型团队和复杂项目。本文详细对比了 JavaScript 和 TypeScript 的优缺点,并提供了实际代码示例,帮助开发者根据项目需求选择合适的工具。
44 2
|
2月前
|
JavaScript 前端开发 安全
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
47 10
|
2月前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
57 8
|
3月前
|
JavaScript 容器
带方向感知功能的js图片遮罩层插件
带方向感知功能的js图片遮罩层插件
|
4月前
|
JavaScript 前端开发 容器
jQuery多功能滑块插件r-slider.js
r-slider.js是一款jQuery多功能滑块插件。使用该插件,可以制作出滑块、开关按钮、进度条、向导步骤等多种效果。
74 5
|
4月前
|
前端开发 JavaScript 持续交付
提高JavaScript编程效率
提高JavaScript编程效率
48 3
|
4月前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
69 2
|
4月前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包:解锁编程潜能,释放你的创造力
【10月更文挑战第25天】本文深入探讨了JavaScript中的闭包,包括其基本概念、创建方法和实践应用。闭包允许函数访问其定义时的作用域链,常用于数据封装、函数柯里化和模块化编程。文章还提供了闭包的最佳实践,帮助读者更好地理解和使用这一强大特性。
41 2
|
5月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
129 1

热门文章

最新文章