NFA的主要特征为支持捕获组和忽略优先量词,而DFA则不支持这两个特性,了解所使用语言的正则表达式类型有助于优化所书写的正则表达式,使其更快,同时避免错误。
这里仅就上述特性的测试来判断JS中正则表达式的类型。
本次测试的使用的是nodejs、chrome、firefox和ie,由于这四个所表示的结果一致,所以只贴出来同一个测试结果。
1.忽略优先量词测试
var res = '123456'.match(/\d{3,5}/);
console.log(res);
var res = '123456'.match(/\d{3,5}?/);
console.log(res);
得到的结果如下:
[ '12345', index: 0, input: '123456' ]
[ '123', index: 0, input: '123456' ]
因此忽略优先量词是有效的。
2. 多选结构的测试
var res = 'nfa not'.match(/nfa|nfa not/);
console.log(res);
得到结果如下:
[ 'nfa', index: 0, input: 'nfa not' ]
证明优先选择第一个分组nfa。
3. 可以使用捕获分组的括号
这里使用trim的一种实现方法举例。
String.prototype.trim = function(){
return this.replace(/^\s*(.*?)\s*/, function($1, $2){
return $2;
});
};
上面代码的$2就是捕获分组的应用。
4. 对比egrep
根据对比grep -E的实现如下。
忽略优先测试如下:
分支测试如下:
因此可以得出结论,目前主流的JS引擎使用的是NFA匹配规则!
- 大小: 4.5 KB
- 大小: 2.5 KB
分享到:
相关推荐
考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2...
• Javascript正则表达式在线测试工具 如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此。由于难于读写,容易出错,...
编写该代码是为了了解回溯正则表达式引擎的工作方式(如其大量注释),以及某些有毒的正则表达式/字符串组合如何导致回溯引擎花费指数时间来确定是否存在匹配项。 它起初只是对Resources [2]中指定的C程序的简单翻译...
这是一个工具,用于通过使用修补的来抓取网站列表的首页来构建在野外发现的正则表达式(regexes)数据集,该v8 Javascript引擎已被修改为记录所有正则表达式和文本应用它们的字符串,实际上是由v8正则表达式引擎编译...
在文本字段中输入与JavaScript兼容的正则表达式。 您的PEG将显示在下面的文本区域中。 随着语法长度的增加,将句段移至新规则。 您可以根据需要创建任意多个规则,即使是最复杂的语法也可以提供可读性。 在此处...
Javascript的正则表达式引擎与许多其他编程语言非常相似。 它仅在深奥的细节上有所不同,并且不支持Lookbehind断言,因此本教程将不予介绍。 有关以及许多其他语言的的,Jan Goyvaerts是您的第一手资料,也是最后一...
RegexBuddy是学习、使用正则表达式的必备工具,其包含PCRE、Java、.Net、Perl、Ruby、Tcl、Javascript等主流正则表达式引擎,提供了正则表达式分析、测试、调试功能,并包含大量实用例子和不同语言、引擎下的代码...
第二部分包括第8章到第16章,着重讨论了JavaScript支持的编程范式、核心概念的延伸、JavaScript的前端开发框架、测试框架、JavaScript引擎、JavaScript在Java,C、C++等应用中的使用,以及服务器端的JavaScript应用...
ExpoSE是JavaScript的动态符号执行引擎,由英国伦敦皇家霍洛威大学的( ,邓肯·米切尔(Duncan Mitchell)和( (现为)开发。 ExpoSE支持浏览器中Node.js程序和JavaScript的符号执行。 ExpoSE基于Jalangi2和Z3 SMT...
回归是在Rust中实现的回溯正则表达式引擎,其目标是JavaScript正则表达式语法。有关更多信息,请参见。 它是快速的,支持Unicode的,几乎没有依赖关系,并且具有很大的测试套件。它提供的保证少于regex但是它启用了...
特征线程安全彻底仔细的测试布尔值,数字,字符串,对象,数组,正则表达式,函数编译并运行JavaScript 保存并加载预编译的脚本数据使用全局对象模板创建JavaScript上下文在Go中操作JavaScript对象属性和数组元素...
//测试浏览器是否支持正则表达式预编译 var baseReg = /\{([\w\.]+)\}/g, numReg = /^\d+$/, //预编译核心的正则表达式,以提高正则匹配效率 formatReg = baseReg.compile ? baseReg.compile(baseReg.source, "g")...
:一个正则表达式助手。 : Booru 抓取器。 :GTK2 图像查看器、漫画阅读器和 booru 浏览器。 :Spotify CSS 注入器。 :用于解释性数学视频的 Python 动画引擎。 :Python CLI 到 GUI。 :一个 HTTP 基准测试工具。 ...
特征全面的ECMAScript 5.1支持(包括正则表达式和严格模式)。 通过几乎所有带有es5id标签的。 目标是通过所有这些。 请注意,当前的工作提交是 。 下一次提交删除了大多数es5id标记,这使得无法区分要运行的测试。 ...
编程语言的一组库,为线性代数、伪随机数生成、多线程、图像处理、正则表达式和单元测试等任务和结构提供支持。 它包含八十多个单独的库。 CMake 是一个开源、跨平台的工具系列,旨在构建、测试和打包软件。 CMake ...
13.35 使用正则表达式验证日期 13.36 全面的日期选择功能 13.37 全球的时间查看表 13.38 无刷新定时取数据 13.39 取当月的最后一天 第 14章 数字、数组和统计函数特效 14.1 边打字边显示字数 14.2 创建随机数 14.3 ...
3.4.3 介绍正则表达式 3.4.4 URL重写与PHP 3.4.5 将带两个参数的URL进行重写数字化 3.4.6 重写多关键词URL地址 3.4.7 建立链接工厂 3.4.8 分页与URL重写 3.4.9 重写图像和流媒体 3.5 重写没有解决的问题 3.6 最后的...
13.35 使用正则表达式验证日期 13.36 全面的日期选择功能 13.37 全球的时间查看表 13.38 无刷新定时取数据 13.39 取当月的最后一天 第 14章 数字、数组和统计函数特效 14.1 边打字边显示字数 14.2 创建随机数 14.3 ...
3.4.3 介绍正则表达式 3.4.4 URL重写与PHP 3.4.5 将带两个参数的URL进行重写数字化 3.4.6 重写多关键词URL地址 3.4.7 建立链接工厂 3.4.8 分页与URL重写 3.4.9 重写图像和流媒体 3.5 重写没有解决的问题 3.6...
这些课程构建了诸如文件备份系统,测试框架,正则表达式匹配器和浏览器布局引擎之类的小版本,以使它们神秘化并提供一些有经验的程序员的想法的见解。 该项目中的所有书面材料都可以根据知识共享-署名许可的条款...