在特定单词之后仅提取<string> / <string>或<string>

时间:2019-04-28 19:09:13

标签: javascript regex

我正在尝试构建一个正则表达式,以一种不错的方式提取字符串的特定部分。 我可以收到如下所示的字符串:

  • 待处理的UserA合并修补程序/ taskA
  • UserB待合并功能/ taskC_expansion已完成
  • UserC待执行的合并
  • 要执行的UserD待合并修补程序

“待合并”后的字符串基本上是分支名称。

如何在待处理的合并词之后提取分支名称,以便它在字符串不是/且只有“ hotfix”的情况下也适用?

我可以处理在“待合并”之后没有分支名称,但是如果存在所有正则表达式的情况,那将是很好的

我尝试过:
[^未完成合并]。(\ w *),第一个单词与“ to”一起匹配。
待合并(。\ w + \ W + \ w +),但在“待合并合并修补程序要执行”的情况下,它会匹配“至”修补程序

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式,

Pending Merge\s+(\S+\/\S+|hotfix\b)

并从group1捕获您的分支

没有这样string1/string2格式的字符串的字符串将不匹配,我希望这是您所期望的。

Regex Demo

var arr = ['UserA Pending Merge hotfix/taskA to do','UserB Pending Merge feature/taskC_expansion done','UserC Pending Merge to do','UserD Pending Merge hotfix to do']

for (s of arr) {
  var m = /Pending Merge\s+(\S+\/\S+|hotfix\b)/i.exec(s)
  if (m != null) {
	  console.log(s + " --> " +/Pending Merge\s+(\S+\/\S+|hotfix\b)/i.exec(s)[1])
  } else {
    console.log('No branch found')
  }
}

答案 1 :(得分:1)

您可以使用

/pending merge\s*(.*?)\s*(?:to do|done)/i

请参见regex demo

详细信息

  • pending merge-文字子字符串
  • \s*-超过0个空格
  • (.*?)-捕获组1:除换行符以外的任何0+个字符,并且尽可能少
  • \s*-超过0个空格
  • (?:to do|done)-to dodone

enter image description here

JS演示:

var strs = ['UserA Pending Merge hotfix/taskA to do',
'UserB Pending Merge feature/taskC_expansion done',
'UserC Pending Merge to do',
'UserD Pending Merge hotfix to do'];
var regex = /pending merge\s*(.*?)\s*(?:to do|done)/i;
for (var s of strs) {
  console.log(s);
  var m = s.match(regex);
  if (m) {
    console.log("FOUND: ", m[1]);
  }
}

答案 2 :(得分:0)

This simple RegEx可能会帮助您:

User[A-Z] Pending Merge\s(.+)

enter image description here

它只会在使用时创建一个左边界:

User[A-Z] Pending Merge\s

并在使用此捕获组(.+)之后提取所有内容。

如果愿意,可以向此组添加其他边界。

(User[A-Z]{1} Pending Merge\s)(.+|)(?:to\sdo|done)

enter image description here

然后,您可以将其简化为类似于this RegEx的内容:

User[A-Z]{1} Pending Merge\s(.+|)(to\sdo|done)

enter image description here

,您可以使用 $ 1 来调用它,这是第一个具有所需目标的捕获组。