【问题标题】:REGEX - links vs hashtags conflict正则表达式 - 链接与主题标签冲突
【发布时间】:2015-05-28 11:00:27
【问题描述】:

我正在使用一些正则表达式从我从 API(twitter、facebook、..)获得的文本中转换链接、主题标签、提及等

效果很好,但是在链接中有锚 # 的特殊情况下,第一个模式首先转换链接,然后是 link 标签内的 hastag - 例如转换:

http://www.mytaratata.com/emission/taratata-n89/video/557/edwyn-collins-a-girl-like-you-1995#newsletter

一团糟。

我只是希望 twitter 主题标签的正则表达式不匹配,如果它是一个链接 - (例如,如果它包含一个点)

hello#music -> match
#hello#music -> match
hello.com#music -> no match

我正在使用负前瞻进行类似的事情,但我无法理解:

((?!\.)#.*\w*[a-zA-Z_]+\w*)

【问题讨论】:

  • 如果您想匹配没有点的字符串,我看不出使用.* 的意义。只需使用^(#[^.]*\w*[a-zA-Z_]+\w*)$,它永远不会接受点。

标签: javascript regex negative-lookahead


【解决方案1】:

我想你想要这样的东西,

^(?!.*?\.).*?(#.*\w*[a-zA-Z_]+\w*)

从组索引 1 中获取 hasttag。

DEMO

^.*?\..*$|(#\w*[a-zA-Z_]+\w*)

DEMO

【讨论】:

    【解决方案2】:

    我建议在这里使用这个正则表达式保持简单:

    ^[^.\n]+#([^#.\n]+)
    

    RegEx Demo

    【讨论】:

    • 感谢您的回答,我会努力改进它,但在句子#newsletter.#hello 的情况下,它不够精确
    • 实际上只是#hello(和#newsletter)
    • btw sentence#newsletter.#hello 甚至不匹配 Avinash 的正则表达式
    • 如果要允许带点的输入,那么您需要强大的逻辑来检测链接,仅检查是否存在 DOT 是不够的。
    • 是的,这就是我正在检查的内容 :),但我认为我可以同时使用这两个答案来找到好的正则表达式,我之前只是被卡住了,再次感谢您的快速帮助
    猜你喜欢
    • 1970-01-01
    • 2012-09-10
    • 2021-02-17
    • 2021-06-20
    • 1970-01-01
    • 2010-11-19
    • 2011-05-15
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多