JS编程建议——38:正确认识正则表达式工作机制

简介: 38:正确认识正则表达式工作机制

建议38:正确认识正则表达式工作机制
有很多因素影响正则表达式的效率。首先,正则表达式适配的文本千差万别,部分匹配时比完全不匹配所用的时间要长。其次,每种浏览器的正则表达式引擎也有不同的内部优化。要有效使用正则表达式,重要的是理解它们的工作机制。一个正则表达式处理的基本步骤如下:
第1步,编译。在创建了一个正则表达式对象后,浏览器先要检查模板有没有错误,然后将它转换成一个本机代码例程,用于执行匹配工作。如果将正则表达式赋给一个变量,就可以避免重复执行此步骤。
第2步,设置起始位置。当一个正则表达式投入使用时,要先确定目标字符串中开始搜索的位置。它是字符串的起始位置,或者由正则表达式的lastIndex 属性指定,但当它从第4步返回到这里的时候,此位置将位于最后一次尝试起始位置推后一个字符的位置上。
浏览器厂商优化正则表达式引擎的方法:在这一阶段中通过早期预测跳过一些不必要的工作。例如,如果一个正则表达式以^开头,IE和Chrome浏览器通常判断在字符串起始位置上是否能够匹配,进而避免不明智地搜索后续位置。另一个例子是匹配第三个字母是x的字符串,聪明的方法是先找到x,然后再将起始位置回溯两个字符。
第3步,匹配每个正则表达式的字元。正则表达式一旦找好起始位置,将会一个个地扫描目标文本和正则表达式模板。当一个特定字元匹配失败时,正则表达式将试图回溯到扫描之前的位置上,然后进入正则表达式其他可能的路径。
第4步,匹配成功或失败。如果在字符串的当前位置上发现一个完全匹配的字符,那么正则表达式宣布成功。如果正则表达式的所有可能路径都尝试过了,但没有成功匹配,那么正则表达式引擎回到第2步,从字符串的下一个字符重新尝试。只有字符串中的每个字符(以及最后一个字符后面的位置)都经历了这样的过程之后还没有成功匹配,正则表达式才会宣布彻底失败。
牢记这一过程将有助于判别那些影响正则表达式性能问题的类型。

相关文章
|
1月前
|
移动开发 JavaScript 前端开发
JavaScript的正则表达式实现邮箱校验
JavaScript的正则表达式实现邮箱校验
52 1
|
1月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
|
1月前
|
前端开发 JavaScript 开发者
探索JavaScript ES6的八种常见使用技巧:开启现代编程之旅
探索JavaScript ES6的八种常见使用技巧:开启现代编程之旅
|
1月前
|
设计模式 JavaScript 前端开发
深入理解 JavaScript 中的绑定机制(下)
深入理解 JavaScript 中的绑定机制(下)
|
1月前
|
JavaScript 前端开发
深入理解 JavaScript 中的绑定机制(上)
深入理解 JavaScript 中的绑定机制(上)
|
1月前
|
JavaScript 前端开发
javascript中的正则表达式
javascript中的正则表达式
|
29天前
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
14 1
|
30天前
|
JavaScript 前端开发 算法
深入探讨前端框架Vue.js中的虚拟DOM机制
本文将深入探讨前端框架Vue.js中的虚拟DOM机制,分析其原理、优势以及在实际开发中的应用场景,帮助读者更好地理解Vue.js框架的核心特性。
N..
|
1月前
|
JavaScript 前端开发 PHP
web编程的正则表达式
web编程的正则表达式
N..
10 1
|
1月前
|
消息中间件 前端开发 JavaScript
深入理解JavaScript中的事件循环机制
JavaScript作为一种前端开发必备的编程语言,在处理异步操作时常常涉及到事件循环机制。本文将深入探讨JavaScript中事件循环的工作原理,帮助读者更好地理解和运用这一关键概念。