如何在正则表达式值或值内添加注释? [复制]
Posted
技术标签:
【中文标题】如何在正则表达式值或值内添加注释? [复制]【英文标题】:How to add a comment inside a regexp value or value? [duplicate] 【发布时间】:2017-01-14 07:18:04 【问题描述】:在声明值时我们可以这样做:
var x, // comment
y, // comment
z; // comment
没关系。我有这个有点长的正则表达式(我还在向自己介绍正则表达式),我不习惯这样做,这很有效
var pattern = /^(1\s?)?(\(\d3\)|\d3)[\s\-]?\d3[\-\s]?\d4$/;
但是当我尝试像在变量声明示例中那样做时:
var pattern = /^(1\s?)? // optional 1 with space or nonspace; also optional
(\(\d3\)|\d3) // optional () bracket in 3 digits
[\s\-]? // optional space and dash
\d3 // 3 digits
[\-\s]?
\d4$/; // 4 digits
上面的代码不起作用,但我只是为了学习目的而这样做。有可能吗?
【问题讨论】:
如果你想要这种格式,只需在模式上方的块注释中将其分解。 “可以吗?”没有。 我尝试使用 /* / 仍然无法为我工作,你能扭曲我的代码吗?在 /^(1\s?)? / */ 我收到未开始评论的警告,在底部我的 \ 收到意外警告 @FelixKling 好的谢谢,我想我得把它放在下面 使用提供此功能的 XRegExp。 【参考方案1】:您可以尝试通过连接字符串数组来构建正则表达式:
var pattern = new RegExp([
"(\\(\d3\\)|\\d3)", // optional () bracket in 3 digits
"[\\s\\-]?", // optional space and dash
"\\d3", // 3 digits
"[\\-\\s]?",
"\\d4$/" // 4 digits
].join(""));
当然,这不是很优雅,因为它需要转义所有这些斜线。
编辑:实际上,您可以通过创建RegExp
s 数组而不是字符串然后连接它们来避免这些斜线逃逸业务:
var pattern = new RegExp([
/^(1\s?)?/, // optional 1 with space or nonspace; also optional
/(\(\d3\)|\d3)/, // optional () bracket in 3 digits
/[\s\-]?/, // optional space and dash
/\d3/, // 3 digits
/[\-\s]?/,
/\d4$/ // 4 digits
].map(function(x) return x.source).join(""));
这需要使用map
的额外步骤将每个RegExp
转换回字符串。
【讨论】:
【参考方案2】:使用正则表达式文字你不能做你想做的事,但尝试这样的事情是什么:
var pattern = /^(1\s?)?(\(\d3\)|\d3)[\s\-]?\d3[\-\s]?\d4$/;
/* /^(1\s?)? optional 1 with space or nonspace
(\(\d3\)|\d3) optional () bracket in 3 digits
[\s\-]? optional space and dash
\d3 3 digits
[\-\s]?
\d4$/ 4 digits
*/
只需在下面添加细分?确实,看到这样评论的正则表达式并不常见,如果必须,另一个程序员可以自己分析正则表达式。
一般地评论为什么你正在做某事,而不是如何做,是更好的做法,因此添加评论也许会更好地举例说明它应该和不应该匹配的内容。
【讨论】:
以上是关于如何在正则表达式值或值内添加注释? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NLTK 正则表达式模式用 UP/DOWN 指标注释财经新闻?
如何在 Python 中将整数添加到此正则表达式中而不对整数进行硬编码? [复制]