【问题标题】:Javascript regex compared to Perl regexJavascript 正则表达式与 Perl 正则表达式的比较
【发布时间】:2017-09-27 12:05:11
【问题描述】:

说到正则表达式,我只是个菜鸟。我知道 Perl 的正则表达式很棒,但我对 Perl 了解不多。最近开始学习 JavaScript 并遇到了 regex for 验证用户输入...没有太多使用它们。

JavaScript regexp 与 Perl regexp 相比如何?异同?
所有用 JS 编写的正则表达式都可以在 Perl 中使用吗?反之亦然?
类似的语法?

【问题讨论】:

  • 我很想知道是否有人回答这个问题。我知道 Perl 和 JavaScript 之间的基本正则表达式功能是相同的(^ 左锚,$ 右锚,\b 表示单词边界等)。不过,某些高级功能可能会有所不同,例如非贪婪匹配和反向引用。

标签: javascript perl


【解决方案1】:

我刚刚遇到了一个实例,其中 \d, decimal 在某些版本的 JavaScript 中无法识别——您必须使用 [0-9]。

【讨论】:

    【解决方案2】:

    此comparison 将回答您的所有问题。

    【讨论】:

    • 除了它已经过时了大约三年,因为它只涵盖 Perl 5.8,并且该列表中的一些内容是在 5.10 中添加的。
    • @hobbs - 我们中的一些人仍然生活在 5.8 世界中 :)
    • 具体来说(也就是说,实际上很有帮助),5.10 添加了命名捕获、命名反向引用和使用+ 的“占有量词”,以及与回溯控制和递归相关的一些其他内容- 不在该比较中的下降解析。
    • 我看不到对 Ecmascript 或 javascript 的任何引用。
    【解决方案3】:

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

    还缺少什么:

    • JavaScript 无法通过使匹配成为最终匹配来防止回溯(使用所有格量词 ++/*+/?+ 或原子组 (?>...))。
    • 不支持递归/平衡子组匹配。
    • 另一件(装饰性的)事情是 JavaScript 不知道冗长的正则表达式,这可能会使它们更难阅读。

    除此之外,两种风格的基本正则表达式语法非常相似。

    【讨论】:

    • 您可以使用字符串连接来伪造冗长的正则表达式。它不如真正的冗长正则表达式好,所以当你这样做时障碍更高,但它仍然是一种选择,在某些情况下绝对值得。
    • 在 ECMAScript 2018 中添加了 Lookbehind 断言。
    【解决方案4】:

    另一个区别:在 JavaScript 中,没有s 修饰符:点“.”永远不会匹配换行符。作为 "." 的替代品,字符类 [\s\S] 可以在 JavaScript 中使用,其工作方式类似于 Perl 中的 /./s。

    【讨论】:

    • 或使用字符类[^]
    • ECMAScript 2018 中添加了 s 修饰符。
    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多