TwitterやInstagramなどでポピュラーになったハッシュタグですが、全言語のハッシュタグをパースする必要に駆られたので、正規表現を書いてみました。
Twitterのコードにそれらしいものがあったので、少し改良してみました。
var searchText = "#ラーメン #ramen #라면 #ראמן #拉面"
var hash = '#';
var tag = 'a-zÀ-ÖØ-öø-ÿĀ-ɏɓ-ɔɖ-ɗəɛɣɨɯɲʉʋʻ̀-ͯḀ-ỿЀ-ӿԀ-ԧⷠ-ⷿꙀ-֑ꚟ-ֿׁ-ׂׄ-ׇׅא-תװ-״-ﬨשׁ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﭏؐ-ؚؠ-ٟٮ-ۓە-ۜ۞-۪ۨ-ۯۺ-ۼۿݐ-ݿࢠࢢ-ࢬࣤ-ࣾﭐ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼก-ฺเ-๎ᄀ-ᇿ-ㆅꥠ-가-ힰ-ᄀ-ᅵァ-ヺー-ヾヲ-゚ーA-Za-zぁ-ゖ゙-ゞ㐀-䶿一-鿿꜀-뜿띀-렟-﨟〃々〻';
var digit = '0-90-9';
var underscore = '_';
var regexp = new RegExp(
'(?:^|[^' + tag + digit + underscore + ']+)' +
'[' + hash + ']' +
'(' +
'[' + tag + digit + underscore + ']*' +
'[' + tag + ']+' +
'[' + tag + digit + underscore + ']*' +
')' +
'(?![' + hash + tag + digit + underscore + ']+)',
'g');
tmp = searchText.match(regexp);
result = tmp.map(function (value) {
value = value.trim().split('#');
return '#' + value[1];
});
# => ["#ラーメン", "#ramen", "#라면", "#ראמן", "#拉面"]