我想要一个正则表达式匹配一个像twitter中那样的简单主题标签(例如#someword)。我希望它也能识别非标准字符(如西班牙语,希伯来语或中文字符)。
这是我最初的正则表达式:(^|\s|\b)(#(\w+))\b
- >但它不识别非标准字符
然后,我尝试使用XRegExp.js,虽然有效,但运行速度太慢。
有关如何操作的建议吗?
答案 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替换为字边界