2017-10-16 121 views
0

我遇到了这个文档:https://swtch.com/~rsc/regexp/regexp1.html 声称Perl,Java和许多其他语言使用基于递归回溯的“慢”RegExp,但grep和awk(也是Go)使用更快的有限自动机。即正则表达式转换为FA然后执行。该论文还声称,所有语言都应该切换到FA技术,尽管其实施更为复杂。我很好奇,如果当前的JavaScript实现有这样或那样的方式。是基于有限自动机还是递归回溯的v8/firefox RegExp实现?

+1

JS正则表达式[更像Perl](https://www.ecma-international.org/ecma-262/5.1/#sec-15.10),但它并不意味着引擎是“慢”。请注意,该文章中使用的模式过于虚构,“a?a?aaa?”必须写为“a {3,6}”,并且速度尽可能快。这只是一种示例,说明不好的模式可能会减慢正则表达式的执行速度。如果您正确编写模式并为“正确”任务编写模式,那么使用任何语言的正则表达式都不会遇到任何问题。 –

+0

不是一个真正的编码问题吗?任何人都可以搜索并找到V8和SpiderMonkey的源代码(firefox的当前JS引擎) –

回答