有什么方法可以在 JavaScript 正则表达式中嵌入注释,就像在 Perl 中一样?我猜没有,但我的搜索没有找到任何说明你可以或不能的东西。
问问题
794 次
2 回答
14
您不能在正则表达式文字中嵌入评论。
您可以在传递给 RegExp 构造函数的字符串构造中插入注释:
var r = new RegExp(
"\\b" + // word boundary
"A=" + // A=
"(\\d+)"+ // what is captured : some digits
"\\b" // word boundary again
, 'i'); // case insensitive
但是正则表达式文字要方便得多(注意我必须如何转义\
)我宁愿将正则表达式与注释分开:只需在您的正则表达式之前放置一些注释,而不是在里面。
编辑 2018:这个问题和答案非常古老。EcmaScript 现在提供了处理这个问题的新方法,更准确地说是模板字符串。
例如,我现在在节点中使用这个简单的实用程序:
module.exports = function(tmpl){
let [, source, flags] = tmpl.raw.toString()
.replace(/\s*(\/\/.*)?$\s*/gm, "") // remove comments and spaces at both ends of lines
.match(/^\/?(.*?)(?:\/(\w+))?$/); // extracts source and flags
return new RegExp(source, flags);
}
const regex = rex`
^ // start of string
[a-z]+ // some letters
bla(\d+)
$ // end
/ig`;
console.log(regex); // /^[a-z]+bla(\d+)$/ig
console.log("Totobla58".match(regex)); // [ 'Totobla58' ]
于 2013-11-08T17:31:18.313 回答
-2
现在有了严重的反引号,你可以做一些内联评论。请注意,在下面的示例中,对匹配的字符串中不会出现的内容进行了一些假设,特别是关于空格。但我认为,如果你process()
仔细编写函数,你通常可以做出这样的有意假设。如果没有,可能有创造性的方法来定义正则表达式的小“迷你语言扩展”,以使其工作。
function process() {
var regex = new RegExp("\\s*([^#]*?)\\s*#.*$", "mg");
var output = "";
while ((result = regex.exec(arguments[0])) !== null ){
output += result[1];
}
return output;
}
var a = new RegExp(process `
^f # matches the first letter f
.* # matches stuff in the middle
h # matches the letter 'h'
`);
console.log(a);
console.log(a.test("fish"));
console.log(a.test("frog"));
这是一个代码笔。
另外,对于 OP,只是因为我觉得有必要这么说,这很好,但是如果您的结果代码与字符串连接一样冗长,或者如果您需要 6 个小时来找出正确的正则表达式,那么您就是你团队中唯一一个会费心使用它的人,也许你的时间有更好的用途......
我希望你知道,我之所以对你直言不讳,是因为我珍视我们的友谊。
于 2018-03-23T04:19:50.643 回答