11

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

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

关于如何做的任何建议?

4

3 回答 3

7

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

于 2013-06-16T12:46:03.133 回答
2

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

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

[\s.,:,]应该包括空格、标点符号和任何其他可以被视为终止符号的符号。

于 2013-06-05T14:36:42.823 回答
1

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

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

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

结果:

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

编辑 - 将 \b 替换为单词边界

于 2013-06-05T14:23:55.463 回答