我想要一个正则表达式来匹配像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替换为字边界