我读这篇文章今天在两个不同的正则表达式的算法。
根据文章,旧的Unix工具(例如ed,sed,grep,egrep,awk和lex)在其常规表达形式中均使用所谓的Thompson NFA算法…
但是,较新的工具(例如Java,Perl,PHP和Python)对它们的正则表达式使用不同的算法,它们的运算速度要慢得多。
本文完全没有提及Javascript的regex算法,(是的,我知道那里有各种JS引擎),但我想知道是否有人知道他们使用了哪些算法,以及是否应该将这些算法换成Thompson。 NFA。
Javascript ECMA语言描述没有对正则表达式的特定实现提出要求,因此问题的一部分格式不正确。您真的想知道特定浏览器中的特定实现。
但是,Perl / Python等使用较慢算法的原因是,定义的regex语言并不是 真正的 正则表达式。真正的正则表达式可以表示为有限状态机,但是regex的语言是上下文无关的。这就是为什么时尚只是将其称为“ regex”而不是谈论正则表达式。
是的,事实上javascript regex不是 免费的 常规 内容 。考虑使用`{n,m}’的语法,即从 n 到 m个 接受的正则表达式匹配。令 d 差 d = | nm |。的语法的装置存在一个串 _UX d瓦特_是可以接受的,但字符串 _UX K> d瓦特_不是。通过常规语言的抽水引理可以得出结论,这不是常规语言。
(笑。Thinko纠正了。)