如何在正则表达式值或值内添加注释? [复制]

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(""));

当然,这不是很优雅,因为它需要转义所有这些斜线。

编辑:实际上,您可以通过创建RegExps 数组而不是字符串然后连接它们来避免这些斜线逃逸业务:

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 中将整数添加到此正则表达式中而不对整数进行硬编码? [复制]

正则表达式

使用正则表达式向 pdf 页面添加注释时出现 Swift 问题

使用正则表达式自动向 PDF 文件添加注释 [关闭]

如何在 PHP 中注释掉正则表达式的 */ 部分