【问题标题】:RegEx: Link Twitter-Name Mentions to Twitter in HTML正则表达式:将 Twitter 名称提及链接到 HTML 中的 Twitter
【发布时间】:2012-01-25 06:43:15
【问题描述】:

我想做THIS,稍微复杂一点:

可以说,我有一个 HTML 输入:

<a href="http://www.example.com" title="Bla @test blubb">Don't break!</a>
Some Twitter Users: @codinghorror, @spolsky, @jarrod_dixon and @blam4c.
You can't reach me at blam4c@example.com.

是否有一个很好的正则表达式来替换通过指向 twitter 的链接提及的 twitter 用户名,但保留 @example(底部的电子邮件地址)和 @test(在链接标题中,即在 HTML 标记中)?

它可能还应该尝试不在现有链接中添加链接,即不要破坏这个:

<a href="http://www.example.com">Hello @someone there!</a>

我目前的尝试是在字符串的开头添加“>”,然后使用这个 RegEx:

Search:  '/>([^<]*\s)\@([a-z0-9_]+)([\s,.!?])/i'
Replace: '>\1<a href="http://twitter.com/\2">@\2</a>\3'

然后删除我在步骤 1 中添加的“>”。

但是除了“@blam4c”之外,它不会匹配任何东西。我知道为什么会这样,这不是问题。

我想找到一种解决方案,可以在不破坏 HTML 的情况下查找并替换所有 twitter 用户名提及。也许不使用 RegEx 编码会更好?

【问题讨论】:

    标签: html regex twitter


    【解决方案1】:

    首先,将尖括号放在正则表达式之外。

    使用 HTML 解析器和 xpath 选择您有兴趣处理的文本节点,然后考虑使用正则表达式仅匹配这些节点中的 @refs。

    我会让其他人尝试对正则表达式部分给出具体答案。

    【讨论】:

    • 我担心你会这么说,因为这和我来的结果一样;)
    【解决方案2】:

    我同意 ddaa,如果不首先去除 html 链接,几乎没有理智的方法可以攻击此问题。

    大概您会从一条实际的 Twitter 消息开始,根据定义,它不能包含任何手动输入的超链接。

    例如,我是这样找到这个问题的(链接解决了这个问题,所以不要费心点击它!)

    一些 Twitter 用户:@codinghorror、@spolsky、@jarrod_dixon 和 @blam4c。 http://bit.ly/2phvZ1

    在这种情况下,很简单:

    var msg = "Some Twitter Users: @codinghorror, @spolsky, @jarrod_dixon and @blam4c. http://bit.ly/2phvZ1";
    
    var html = Regex.Replace(msg, "(?<!\w)(@(\w+))", 
        "<a href=\"http://twitter.com/$2\">$1</a>");
    

    (这可能需要一些调整,我想根据语料库对其进行测试,但对于普通的 Twitter 消息来说似乎是正确的)

    至于您更复杂的案例(推文中嵌入了 HTML 标记),我不知道。对我来说太难了。

    【讨论】:

      【解决方案3】:

      这个正则表达式可能会更好一些:/\B\@([\w\-]+)/gim

      这里有一个 jsFiddle 的例子:http://jsfiddle.net/2TQsx/4/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多