正则表达式(类似Twitter)标签,允许非ASCII字符

时间:2013-06-05 13:55:23

标签: javascript regex twitter hashtag unicode-string

我想要一个正则表达式匹配一个像twitter中那样的简单主题标签(例如#someword)。我希望它也能识别非标准字符(如西班牙语,希伯来语或中文字符)。

这是我最初的正则表达式:(^|\s|\b)(#(\w+))\b
- >但它不识别非标准字符 然后,我尝试使用XRegExp.js,虽然有效,但运行速度太慢。

有关如何操作的建议吗?

3 个答案:

答案 0 :(得分:7)

最终我发现了这个:twitter-text.js有用的链接,这基本上就是twitter如何解决这个问题。

答案 1 :(得分:2)

对于不支持unicode的原生JS正则表达式,您唯一的选择是显式枚举可以结束标记并匹配其他所有内容的字符,例如:

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

[\s.,:,]应包含空格,标点符号以及其他可被视为终止符号的内容。

答案 2 :(得分:1)

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

说明:此正则表达式将搜索#后跟一个或多个非#字符,后跟0或更多空格,逗号或分号。

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

结果:

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

编辑 - 将\ b替换为字边界