一尘不染

Javascript对Regex使用哪种正则表达式算法?

algorithm

我读这篇文章今天在两个不同的正则表达式的算法。

根据文章,旧的Unix工具(例如ed,sed,grep,egrep,awk和lex)在其常规表达形式中均使用所谓的Thompson
NFA算法…

但是,较新的工具(例如Java,Perl,PHP和Python)对它们的正则表达式使用不同的算法,它们的运算速度要慢得多。

本文完全没有提及Javascript的regex算法,(是的,我知道那里有各种JS引擎),但我想知道是否有人知道他们使用了哪些算法,以及是否应该将这些算法换成Thompson。
NFA。


阅读 183

收藏
2020-07-28

共1个答案

一尘不染

Javascript ECMA语言描述没有对正则表达式的特定实现提出要求,因此问题的一部分格式不正确。您真的想知道特定浏览器中的特定实现。

但是,Perl / Python等使用较慢算法的原因是,定义的regex语言并不是 真正的
正则表达式。真正的正则表达式可以表示为有限状态机,但是regex的语言是上下文无关的。这就是为什么时尚只是将其称为“ regex”而不是谈论正则表达式。

更新资料

是的,事实上javascript regex不是 免费的 常规 内容 。考虑使用`{n,m}’的语法,即从 nm个
接受的正则表达式匹配。令 dd = | nm |。的语法的装置存在一个串 _UX d瓦特_是可以接受的,但字符串 _UX K>
d瓦特_不是。通过常规语言的抽水引理可以得出结论,这不是常规语言。

(笑。Thinko纠正了。)

2020-07-28