Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略Javascript正则表达式模式中的空白?_Javascript_Regex_Whitespace - Fatal编程技术网

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

忽略Javascript正则表达式模式中的空白?,javascript,regex,whitespace,Javascript,Regex,Whitespace,根据我的研究,Javascript的正则表达式似乎没有任何与Perl的/x修饰符或.NET的RegexOptions.IgnorePatternWhitespace修饰符等效的内置修饰符。它们非常有用,因为它们可以使复杂的正则表达式更易于阅读。首先,我是否错过了一些东西,是否有一个Javascript内置的等价物?其次,如果没有,有人知道一个好的jQuery插件可以实现这个功能吗?由于Javascript明显的正则表达式限制,不得不将复杂的正则表达式压缩为一行,这真是太遗憾了。如果我理解正确,您

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

如果我理解正确,您想添加不属于正则表达式的空白吗? 据我所知,使用literal 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(""));

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

如果希望轻松转义和语法突出显示
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,''));
}

是的,但不一样。您已经有了难看的额外Javascript字符串连接语法,并且仍然不能将Perl风格的注释放在行的末尾,比如:h(a | o)t#@Jez:但是您可以将Javascript注释放在那里。不幸的是,没有其他办法。JS不支持冗长的正则表达式。@Jez:最终结果是一样的,但我同意这更难看。但是,你可以在每一行后面加上注释,或者把regexp的不同部分用有意义的名称放进字符串中。蒂姆,我不太明白你在那里加JavaScript注释是什么意思。你能给出一个解释吗?@Jez:我添加了一条评论来澄清。为什么要使用jQuery?jQuery不是导入外部代码的唯一方法。