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

Jez*_*Jez 14 javascript regex whitespace

根据我的研究,看起来Javascript的正则表达式没有任何内置等效于Perl的/ x修饰符,或.NET的RegexOptions.IgnorePatternWhitespace修饰符.这些非常有用,因为它们可以使复杂的正则表达式更容易阅读.首先,我错过了什么,是否有一个内置的Javascript相当于这些?其次,如果没有,有没有人知道一个好的jQuery插件将实现这个功能?由于Javascript明显的正则表达式限制,必须将复杂的正则表达式压缩成一行是一种遗憾.

som*_*ome 16

如果我理解正确你想添加不属于正则表达式的空格?据我所知,文字正则表达式是不可能的.

例:

var a = /^[\d]+$/
Run Code Online (Sandbox Code Playgroud)

您可以在以下几行中分解正则表达式:

var a = RegExp(
  "^" +
  "[\\d]+" +  // This is a comment
  "$" 
);
Run Code Online (Sandbox Code Playgroud)

请注意,因为它现在是普通字符串,所以你必须使用\\转义\

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

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

更新:使用临时数组连接正则表达式:

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(""));
Run Code Online (Sandbox Code Playgroud)

  • JavaScript不是perl. (4认同)
  • 是的,但它不一样.你有一个丑陋的额外Javascript字符串连接语法,你仍然不能把Perl风格的注释放在行的末尾,如:h(a | o)t#< - 匹配帽子或热门 (2认同)
  • @Jez:但你可以把JavaScript评论放在那里.不幸的是,没有其他办法.JS不支持详细的正则表达式. (2认同)

Kor*_*nel 10

不幸的是,ES5中没有这样的选项,我怀疑它不太可能出现在RegExp文字中,因为它们已经非常难以解析,并且换行会使它们变得更加模糊.

如果您希望轻松转义和语法突出显示RegExp文字,您可以通过利用该source属性加入它们.这不是完美的,但恕我直言,不如一直回到字符串:

new RegExp(
    /foo/.source +
    /[\d+]/.source +
    /bar/.source
);
Run Code Online (Sandbox Code Playgroud)

在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,''));
}
Run Code Online (Sandbox Code Playgroud)