公式 JIRA ID 正規表現 (Java):
Atlassian 自体には、適切な (Java) 正規表現がこれであることを示唆するいくつかの Web ページが浮かんでいます。
((?<!([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
これを LookAhead に移植してa(?!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' ]