官方 JIRA ID 正则表达式(Java):
Atlassian 自己有几个网页浮动,表明一个好的(java)正则表达式是这样的:
((?<!([A-Z]{1,10})-?)[A-Z]+-\d+)
(来源:https ://confluence.atlassian.com/display/STASHKB/Integrating+with+custom+JIRA+issue+key )
Test String:
"BF-18 abc-123 X-88 ABCDEFGHIJKL-999 abc XY-Z-333 abcDEF-33 ABC-1"
Matches:
BF-18, X-88, ABCDEFGHIJKL-999, DEF-33, ABC-1
改进的 JIRA ID 正则表达式(Java):
但是,我不太喜欢它,因为它会匹配“abcDEF-33”中的“DEF-33”,而我更愿意完全忽略“abcDEF-33”。所以在我自己的代码中,我正在使用:
((?<!([A-Za-z]{1,10})-?)[A-Z]+-\d+)
请注意“DEF-33”如何不再匹配:
Test String:
"BF-18 abc-123 X-88 ABCDEFGHIJKL-999 abc XY-Z-333 abcDEF-33 ABC-1"
Matches:
BF-18, X-88, ABCDEFGHIJKL-999, ABC-1
改进的 JIRA ID 正则表达式 (JavaScript):
我还需要 JavaScript 中的这个正则表达式。不幸的是,JavaScript 不支持 LookBehind (?<!a)b
,所以我不得不将它移植到 LookAheada(?!b)
并反转所有内容:
var jira_matcher = /\d+-[A-Z]+(?!-?[a-zA-Z]{1,10})/g
这意味着要匹配的字符串也需要提前反转:
var s = "BF-18 abc-123 X-88 ABCDEFGHIJKL-999 abc XY-Z-333 abcDEF-33 ABC-1"
s = reverse(s)
var m = s.match(jira_matcher);
// Also need to reverse all the results!
for (var i = 0; i < m.length; i++) {
m[i] = reverse(m[i])
}
m.reverse()
console.log(m)
// Output:
[ 'BF-18', 'X-88', 'ABCDEFGHIJKL-999', 'ABC-1' ]