按条件捕获多个字符串

时间:2019-07-07 11:32:00

标签: javascript node.js regex

我正在尝试解析这段文本。第一步是抓住[feat]和换行符之间的所有内容。第二步甚至可以更好地捕获所有壮举并按显示的日期将它们分组。文本存储在变量中。这是一个示例:

## [1.0.0] - 2019-06-28
[feat] - Complete generate pdf refactor

## [1.0.1] - 2019-07-04
[fix] Fixed generate address

[fix] Fixed warrant print

[fix] Fixed note component

## [1.0.2] - 2019-07-05
[feat] Add views as response for production

[feat] Add component 

[fix] Fixed warrant

我尝试使用[(feat])(.*)/nstr.match,但我缺少一些东西。

我想要得到的结果是: [“固定的生成地址”,“添加视图作为生产响应”,“添加组件”]

甚至更好地按日期分组

1 个答案:

答案 0 :(得分:0)

您可以使用

/\[feat]\W*(.+)/g

请参见regex demo。注意:如果[feat]与您需要提取的数据之间只有空格和连字符,则可以将模式精确化为

/\[feat][\s-]*(.+)/g
        ^^^^^^

请参见this regex demoregex graph

enter image description here

详细信息

  • \[feat]-一个[feat]子字符串
  • \W*-0个或更多非单词字符
  • [\s-]*-0个或多个空格或/和连字符
  • (.+)-第1组:除换行符以外的任何0个或多个字符。

JS演示:

var s = "## [1.0.0] - 2019-06-28\n[feat] - Complete generate pdf refactor\n## [1.0.1] - 2019-07-04\n[fix] Fixed generate address\n\n[fix] Fixed warrant print\n\n[fix] Fixed note component\n\n## [1.0.2] - 2019-07-05\n[feat] Add views as response for production\n\n[feat] Add component \n\n[fix] Fixed warrant";
var rx = /\[feat]\W*(.+)/g, m, res=[];
while (m=rx.exec(s)) {
  res.push(m[1]);
}
console.log(res);