【问题标题】:Javascript regex delimiters (any alternative to forward slash)?Javascript 正则表达式分隔符(正斜杠的任何替代方法)?
【发布时间】:2016-07-28 10:19:00
【问题描述】:

在 Javascript 中有什么方法可以在正则表达式中使用与 /(正斜杠)不同的字符作为分隔符? 大多数其他语言都有这样做的方法。

例如,Perl:

 m@myregex@

我们是否仅限于在 Javascript 中使用“/”?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    在 JavaScript 中使用正则表达式的简单方法是使用 / 字符来分隔它。但是,如果您想使用全局对象RegExp,则需要使用普通字符串转义规则将字符串作为第一个参数传递给构造函数。以下是等价的。

    // shorthand way.
    var re = /\w+/;
    // a way to pass a string in
    var re = new RegExp("\\w+");
    

    【讨论】:

    • 谢谢。在我看来,双重转义是一种主要的痛苦,所以我想我坚持使用字符“/”的单一转义并使用“/”作为分隔符。如果有人编写了一个库或特殊函数来使在 javascript 中转义正则表达式更容易,那就太好了!
    【解决方案2】:

    我们是否仅限于在 javascript 中使用“/”?

    不是真的.. 您可以通过使用new RegExp (string) constructor. 来避免使用任何正则表达式分隔符

    var re = new RegExp (string);
    

    请记住,这将要求您进行两次转义而不是一次转义。

    【讨论】:

    • 很好的答案,但我仍然想知道我是否可以在上面的语法中使用与“/”不同的字符。如果我必须以这种方式声明正则表达式,则需要更多的输入。我正在尝试减少编写正则表达式单行代码所需的时间。
    • @pepper 你不能。 JavaScript 解析器与/ 定界符一样,会遇到各种各样的问题;允许任何其他字符将是严重的问题。
    • 你需要用 new RegExp( string ) 实例化正则表达式,并在里面对所有特殊字符进行两次转义,请参阅解决方案。
    • 这是您避免将/ 作为分隔符的问题的直接答案。您标记的答案建议使用使用 /.../ 语法的正则表达式文字,这显然不能满足您的要求。
    【解决方案3】:

    在 Javascript 中,如果您想内联正则表达式,您唯一的选择是正斜杠分隔符:/foo/

    正如其他答案所指出的,您还可以使用 new Regexp("foo") 将正则表达式分配给变量。

    使用多个分隔符绝对是 Perl 的事情。在 Perl 中,您几乎可以使用任何字符作为分隔符,例如字符串:

    使用单引号的典型语法 -- 'dipset'

    使用q函数——q(dipset)q!dipset!q%dipset%

    这是否产生可读的东西取决于上下文。如果结果是可读的,Perl 允许你这样做很好。例如,正则表达式不够可读,内部没有一堆转义的反斜杠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      相关资源
      最近更新 更多