Регулярное выражение для (твитерподобного) хэштага, который позволяет использовать символы, отличные от ASCII

Я хочу, чтобы регулярное выражение соответствовало простому хэштагу, как в twitter (например, #someword). Я хочу, чтобы он также распознавал нестандартные символы (например, на испанском, иврите или китайском).

Это было мое начальное регулярное выражение: (^|\s|\b)(#(\w+))\b
- > но он не распознает нестандартные символы.
Затем я попытался использовать XRegExp.js, который работал, но работал слишком медленно.

Любые предложения по его использованию?

Ответ 1

В конце концов я нашел это: twitter-text.js полезная ссылка, в которой, как правило, решается эта проблема.

Ответ 2

С родными JS-регулярными выражениями, которые не поддерживают unicode, ваш единственный вариант - явно перечислять символы, которые могут заканчивать тег и соответствовать всем остальным, например:

> s = "foo #הַתִּקְוָה. bar"
"foo #הַתִּקְוָה. bar"
> s.match(/#(.+?)(?=[\s.,:,]|$)/)
["#הַתִּקְוָה", "הַתִּקְוָה"]

[\s.,:,] должен содержать пробелы, знаки препинания и все остальное можно считать завершающим символом.

Ответ 3

#([^#]+)[\s,;]*

Объяснение: Это регулярное выражение будет искать #, за которым следует один или несколько символов не #, за которым следует 0 или более пробелов, запятых или точек с запятой.

var input = "#hasta #mañana #babהַ";
var matches = input.match(/#([^#]+)[\s,;]*/g);

Результат:

["#hasta ", "#mañana ", "#babהַ"]

EDIT - Заменено \b для границы слова