我想要一个正则表达式来匹配一个简单的主题标签,比如 twitter(例如#someword)。我还希望它能够识别非标准字符(如西班牙语、希伯来语或中文)。
这是我最初的正则表达式:(^|\s|\b)(#(\w+))\b
--> 但它不能识别非标准字符。
然后,我尝试使用XRegExp.js,它有效,但运行速度太慢。
关于如何做的任何建议?
我想要一个正则表达式来匹配一个简单的主题标签,比如 twitter(例如#someword)。我还希望它能够识别非标准字符(如西班牙语、希伯来语或中文)。
这是我最初的正则表达式:(^|\s|\b)(#(\w+))\b
--> 但它不能识别非标准字符。
然后,我尝试使用XRegExp.js,它有效,但运行速度太慢。
关于如何做的任何建议?
最终我发现了这个:twitter-text.js有用的链接,这基本上是 twitter 解决这个问题的方法。
对于不支持 unicode 的本机 JS 正则表达式,您唯一的选择是显式枚举可以结束标记并匹配其他所有内容的字符,例如:
> s = "foo #הַתִּקְוָה. bar"
"foo #הַתִּקְוָה. bar"
> s.match(/#(.+?)(?=[\s.,:,]|$)/)
["#הַתִּקְוָה", "הַתִּקְוָה"]
[\s.,:,]
应该包括空格、标点符号和任何其他可以被视为终止符号的符号。
#([^#]+)[\s,;]*
说明:此正则表达式将搜索 a#
后跟一个或多个非#
字符,后跟 0 个或多个空格、逗号或分号。
var input = "#hasta #mañana #babהַ";
var matches = input.match(/#([^#]+)[\s,;]*/g);
结果:
["#hasta ", "#mañana ", "#babהַ"]
编辑 - 将 \b 替换为单词边界