我正在尝试构建一个正则表达式,以一种不错的方式提取字符串的特定部分。 我可以收到如下所示的字符串:
“待合并”后的字符串基本上是分支名称。
如何在待处理的合并词之后提取分支名称,以便它在字符串不是/且只有“ hotfix”的情况下也适用?
我可以处理在“待合并”之后没有分支名称,但是如果存在所有正则表达式的情况,那将是很好的。
我尝试过:
[^未完成合并]。(\ w *),第一个单词与“ to”一起匹配。
待合并(。\ w + \ W + \ w +),但在“待合并合并修补程序要执行”的情况下,它会匹配“至”修补程序
答案 0 :(得分:2)
您可以使用此正则表达式,
Pending Merge\s+(\S+\/\S+|hotfix\b)
并从group1捕获您的分支
没有这样string1/string2
格式的字符串的字符串将不匹配,我希望这是您所期望的。
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 do
或done
。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(.+)
它只会在使用时创建一个左边界:
User[A-Z] Pending Merge\s
并在使用此捕获组(.+)
之后提取所有内容。
如果愿意,可以向此组添加其他边界。
(User[A-Z]{1} Pending Merge\s)(.+|)(?:to\sdo|done)
然后,您可以将其简化为类似于this RegEx的内容:
User[A-Z]{1} Pending Merge\s(.+|)(to\sdo|done)
,您可以使用 $ 1 来调用它,这是第一个具有所需目标的捕获组。