代码之家  ›  专栏  ›  技术社区  ›  Jez

忽略Javascript正则表达式模式中的空白?

  •  14
  • Jez  · 技术社区  · 15 年前

    根据我的研究,Javascript的正则表达式似乎没有任何内置的等价于Perl的/x修饰符或.NET的RegexOptions.IgnorePatternWhitespace修改器。这些非常有用,因为它们可以使复杂的正则表达式更易于阅读。首先,我是否遗漏了一些东西?是否有一个内置的Javascript与这些东西等价?其次,如果没有,有人知道一个好的jQuery插件可以实现这个功能吗?由于Javascript明显的正则表达式限制,不得不将复杂的正则表达式压缩到一行中,这是一种遗憾。

    2 回复  |  直到 15 年前
        1
  •  17
  •   some    14 年前

    如果我理解正确,您想添加不是regexp一部分的空白吗?

    var a = /^[\d]+$/
    

    您可以将regexp分成以下几行:

    var a = RegExp(
      "^" +
      "[\\d]+" +  // This is a comment
      "$" 
    );
    

    或者如果你有一个复杂的问题:

    var digit_8 = "[0-9]{8}";
    var alpha_4 = "[A-Za-z]{4}";
    var a = RegExp(
        digit_8 +
        alpha_4 + // Optional comment
        digit_8
     );
    

    var digit_8 = "[0-9]{8}";
    var alpha_4 = "[A-Za-z]{4}";
    var a = RegExp([
        digit_8,
        alpha_4, // Optional comment
        digit_8,
        "[0-9A-F]" // Another comment to a string
     ].join(""));
    
        2
  •  12
  •   Kornel    10 年前

    不幸的是,在ES5中没有这样的选项,我怀疑它不太可能出现在其中 RegExp 文字,因为它们已经很难解析了,换行会使它们更加模糊。

    文本,您可以通过利用 source

    new RegExp(
        /foo/.source +
        /[\d+]/.source +
        /bar/.source
    );
    

    在ES6中,您可以创建自己的模板字符串:

    regexp`
      foo
      [\d+]
      bar
    `;
    
    function regexp(parts) {
       // I'm ignoring support for ${} placeholders for brevity,
       // but full implementation should escape them.
    
       // Note that `.raw` allows use of \d instead of \\d.
       return new RegExp(parts.raw.join('').replace(/\s+/g,''));
    }