Javascript v8/firefox RegExp实现是基于有限自动机还是递归回溯?

Javascript v8/firefox RegExp实现是基于有限自动机还是递归回溯?,javascript,regex,v8,finite-automata,Javascript,Regex,V8,Finite Automata,我偶然发现了这份文件: 这表明Perl、Java和许多其他语言使用基于递归回溯的“慢”RegExp,但grep和awk(也称Go)使用更快的有限自动机。即,将regexp转换为FA,然后执行。本文还声称,所有语言都应该切换到FA技术,尽管它的实现更加复杂。我很好奇当前的JavaScript实现是否有这种或那种方式。V8的regexp引擎“iregexp”基于自动机,请参阅 Firefox现在使用的是V8的Irregexp,参见,因此它也是基于自动机的。JS regex是,但这并不意味着引擎“慢”

我偶然发现了这份文件: 这表明Perl、Java和许多其他语言使用基于递归回溯的“慢”RegExp,但grep和awk(也称Go)使用更快的有限自动机。即,将regexp转换为FA,然后执行。本文还声称,所有语言都应该切换到FA技术,尽管它的实现更加复杂。我很好奇当前的JavaScript实现是否有这种或那种方式。

V8的regexp引擎“iregexp”基于自动机,请参阅


Firefox现在使用的是V8的Irregexp,参见,因此它也是基于自动机的。

JS regex是,但这并不意味着引擎“慢”。请注意,该文章中使用的模式过于人为,
a?a?aaa
必须写成
a{3,6}
,并且速度尽可能快。这只是一个例子,说明糟糕的模式可能会降低正则表达式的执行速度。如果您正确地编写模式并执行“正确”任务,那么在任何语言中使用正则表达式都不会有太多问题。。。任何人都可以搜索并找到V8和SpiderMonkey(firefox当前的JS引擎)的源代码