【问题标题】:Regex for a (twitter-like) hashtag that allows non-ASCII characters允许非 ASCII 字符的(类似 Twitter 的)主题标签的正则表达式
【发布时间】:2013-06-01 06:24:59
【问题描述】:

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

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

有什么建议吗?

【问题讨论】:

标签: javascript regex twitter hashtag unicode-string


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    结果:

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

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

    【讨论】:

    • + 后面的? 只是表示在尝试匹配所有非哈希字符时“不要太贪心”。
    • 带有'?'它与“#mañana”不匹配,没有它,“#mañana baby”将成为一个标签。更不用说希伯来语了——根本不认识。
    • 字边界\b是一个零长度断言,在单词字符和非单词字符之间为真
    • 正如所指出的 \b 在处理非拉丁字符时是不正确的。我已经修改了我的答案。通常井号标签不包含空格@limlim
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多