根据我的研究,看起来Javascript的正则表达式没有任何内置等效于Perl的/ x修饰符或.NET的RegexOptions.IgnorePatternWhitespace修饰符。这些非常有用,因为它们可以使复杂的正则表达式更容易阅读。首先,我错过了什么,是否有一个内置的Javascript相当于这些?其次,如果没有,有没有人知道一个好的jQuery插件将实现这个功能?由于Javascript明显的正则表达式限制,必须将复杂的正则表达式压缩成一行是一种遗憾。
答案 0 :(得分:16)
如果我理解正确,您想添加不属于正则表达式的空格? 据我所知,文字正则表达式是不可能的。
示例:
var a = /^[\d]+$/
您可以在以下几行中分解正则表达式:
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(""));
答案 1 :(得分:9)
不幸的是,在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,''));
}