Official JIRA ID Regex (Java):
Atlassian themselves have a couple webpages floating around that suggest a good (java) regex is this:
((?<!([A-Z]{1,10})-?)[A-Z]+-\d+)
(Source: 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
Improved JIRA ID Regex (Java):
But, I don't really like it because it will match the "DEF-33" from "abcDEF-33", whereas I prefer to ignore "abcDEF-33" altogether. So in my own code I'm using:
((?<!([A-Za-z]{1,10})-?)[A-Z]+-\d+)
Notice how "DEF-33" is no longer matched:
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
Improved JIRA ID Regex (JavaScript):
I also needed this regex in JavaScript. Unfortunately, JavaScript does not support the LookBehind (?<!a)b
, and so I had to port it to LookAhead a(?!b)
and reverse everything:
var jira_matcher = /\d+-[A-Z]+(?!-?[a-zA-Z]{1,10})/g
This means the string to be matched needs to be reversed ahead of time, too:
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' ]