2010-10-16 52 views
30

我只是一个noob,当涉及正则表达式。我知道使用正则表达式Perl会让人惊奇,但我不太了解Perl。最近开始学习JavaScript,碰到用于验证用户输入的 正则表达式......并没有太多使用它们。Javascript regex与Perl正则表达式比较

JavaScript正则表达式与Perl正则表达式的比较如何?共同点和不同点?
所有用JS编写的正则表达式都可以在Perl中使用,反之亦然?
相似的语法?

+1

我很好奇,看看有没有人回答这个问题。我知道Perl和JavaScript之间的基本正则表达式特性是一样的(^锚点左边,$锚点右边,\ b边界等)。某些高级功能可能会有所不同,如非贪婪匹配和后向引用。 – jpsimons 2010-10-16 17:56:50

回答

22

从ECMAScript 2018开始,许多JavaScript的正则表达式缺陷已得到修复。

还缺:

  • JavaScript没有办法阻止通过使最终的比赛回溯(使用占有的量词++/*+/?+或原子团(?>...))。
  • 不支持递归/平衡子组匹配。
  • 另一个(化妆品)的事情是,JavaScript不知道详细的正则表达式,这可能会使它们更难以阅读。

除此之外,基本正则表达式语法在两种口味中都非常相似。

+3

你可以用字符串拼接来伪造冗长的正则表达式。它不如真正的详细正则表达式,所以当你这么做的时候屏障会更高,但它仍然是一个选项,在某些情况下是绝对值得的。 – 2013-02-06 14:54:14

+0

向后断言已在2018年的ECMAScript – Jakob 2018-03-05 20:11:45

6

comparison会回答所有的疑问。

+4

除了大约三年过时之外,因为它只包含Perl 5.8,并且在5.10中添加了该列表中的一些内容。 – hobbs 2010-10-16 17:55:22

+1

@hobbs - 我们中的一些人仍然生活在5.8世界:) – DVK 2010-10-16 18:00:05

+5

具体(即实际上有帮助),5.10使用'+'添加命名捕捉,命名反向引用和“占有量词”,以及一些其他与回溯控制和递归下降解析相关的东西并不在那个比较中。 – hobbs 2010-10-16 18:31:05

5

另一个不同之处:在JavaScript中,没有s修改:圆点 “”将永远不会匹配换行符。作为“。”的替代,可以在JavaScript中使用字符类[\s\S],这将在Perl中用作/./s

+1

被添加或使用的字符类'[^]' – irisjay 2017-07-13 04:11:56

+1

的's'改性剂已在2018的ECMAScript被添加。 – Jakob 2018-03-05 20:07:02