当前位置:  开发笔记 > 编程语言 > 正文

如何在Node/V8中实现正则表达式匹配?

如何解决《如何在Node/V8中实现正则表达式匹配?》经验,为你挑选了1个好方法。

我遇到过一篇文章,该文章显示正则表达式匹配通常使用可能性能不佳的算法与建议的Thompson NFA算法实现.

考虑到这一点,如何在Node或V8中实现?是否有可能使用Thompson NFA的JS实现来提高性能,可能只使用了有限的一部分功能(可能删除了前瞻或其他"高级"功能)?



1> lorefnon..:

正如Chrome开发团队在本公告中提到的,V8引擎使用Irregexp正则表达式引擎:

以下是有关此引擎实现的一些引用:

我们在设计Irregexp时做出的一个基本决定是,我们愿意花费额外的时间来编译正则表达式,如果这样可以更快地运行它.在编译期间,Irregexp首先将正则表达式转换为中间自动机表示.这在很多方面都是"自然"和最易于访问的表示,使得分析和优化正则表达式变得更加容易.例如,当编译/ Sun | Mon /自动机表示时,我们可以认识到两个选项都有'n'作为第三个字符.我们可以快速扫描输入,直到找到'n',然后开始匹配前面两个字符的正则表达式.Irregexp最多可以查找四个字符,一次最多匹配四个字符.

 

优化后,我们生成本机代码,使用回溯来尝试不同的替代方案.回溯可能非常耗时,因此我们使用优化来尽可能避免它.有一些技术可以完全避免回溯,但JavaScript中regexp的性质使得在我们的案例中很难应用它们,尽管这是我们将来可以实现的.

因此V8会编译为本机自动机表示 - 尽管它不使用Thompson NFA.

至于性能,本文将V8正则表达式性能与其他库/语言进行比较.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有