Регулярное выражение для хэштега (похожего на twitter), который позволяет использовать символы, отличные от ASCII
Я хочу, чтобы регулярное выражение соответствовало простому хэштегу, как в twitter (например, #someword). Я хочу, чтобы он также распознавал нестандартные символы (например, на испанском, иврите или китайском).
Это было мое начальное регулярное выражение:(^|s|b)(#(w+))b
--> но он не распознает нестандартные символы.
Затем я попытался использовать XRegExp.js, который работал, но работал слишком медленно.
любые предложения о том, как это сделать?
3 ответов
В конце концов я нашел это: twitter-текст.js полезная ссылка, которая в основном, как twitter решить эту проблему.
С собственными JS-регексами, которые не поддерживают unicode, ваш единственный вариант-явно перечислять символы, которые могут заканчивать тег и соответствовать всему остальному, например:
> s = "foo #הַתִּקְוָה. bar"
"foo #הַתִּקְוָה. bar"
> s.match(/#(.+?)(?=[\s.,:,]|$)/)
["#הַתִּקְוָה", "הַתִּקְוָה"]
на [\s.,:,]
должен включать пробелы, знаки препинания и все остальное, что можно считать завершающим символом.
#([^#]+)[\s,;]*
пояснение: это регулярное выражение будет искать #
затем один или больше не-#
символы, за которыми следует 0 или более пробелов, запятых или точек с запятой.
var input = "#hasta #mañana #babהַ";
var matches = input.match(/#([^#]+)[\s,;]*/g);
результат:
["#hasta ", "#mañana ", "#babהַ"]
EDIT-заменено \b для границы слова