[英]How is regular expression matching implemented in Node / V8?
正如Chrome开发团队在本公告中提到的,V8引擎使用Irregexp正则表达式引擎:
以下是有关此引擎实现的一些引用:
我们在设计Irregexp时做出的一个基本决定是,我们愿意花费额外的时间来编译正则表达式,如果这样可以更快地运行它。 在编译期间,Irregexp首先将正则表达式转换为中间自动机表示。 这在很多方面都是“自然”和最易于访问的表示,使得分析和优化正则表达式变得更加容易。 例如,当编译/ Sun | Mon /自动机表示时,我们可以认识到两个选项都有'n'作为第三个字符。 我们可以快速扫描输入,直到找到'n',然后开始匹配前面两个字符的正则表达式。 Irregexp最多可以查找四个字符,一次最多匹配四个字符。
优化后,我们生成本机代码,使用回溯来尝试不同的替代方案。 回溯可能非常耗时,因此我们使用优化来尽可能多地避免回溯。 有一些技术可以完全避免回溯,但JavaScript中regexp的性质使得在我们的案例中很难应用它们,尽管这是我们将来可以实现的。
因此V8会编译为本机自动机表示 - 尽管它不使用Thompson NFA。
至于性能, 本文将V8正则表达式性能与其他库/语言进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.