RegEx:用HTML将Twitter名称链接到Twitter

RegEx:用HTML将Twitter名称链接到Twitter,html,regex,twitter,Html,Regex,Twitter,我想做的只是稍微复杂一点: 比如说,我有一个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. 一些推特用户:@Codinghoro

我想做的只是稍微复杂一点:

比如说,我有一个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.

一些推特用户:@Codinghoror、@spolsky、@jarrod_dixon和@blam4c。
你一点也联系不到我blam4c@example.com.
是否有一个好的正则表达式来替换twitter用户名中提到的twitter链接,但保留@example(底部的电子邮件地址)和@test(在链接标题中,即HTML标记中)

它可能还应该尝试不在现有链接中添加链接,即不破坏以下内容:

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

我当前的尝试是在字符串开头添加“>”,然后使用以下正则表达式:

Search:  '/>([^<]*\s)\@([a-z0-9_]+)([\s,.!?])/i'
Replace: '>\1<a href="http://twitter.com/\2">@\2</a>\3'
搜索:'/>([^\1\3'
然后删除我在步骤1中添加的“>”

但是除了“@blamb4C”这个词,它什么都配不上。我知道它为什么会这样,这不是问题所在


我想找到一个解决方案,在不破坏HTML的情况下查找并替换所有twitter用户名。也许在不使用正则表达式的情况下编写此代码更好?

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

使用HTML解析器和XPath选择您感兴趣的文本节点,然后考虑一个ReGEXP,只匹配那些节点中的“REFs”。


我会让其他人尝试对regex部分给出具体的答案。

首先,将尖括号放在regexp之外

使用HTML解析器和XPath选择您感兴趣的文本节点,然后考虑一个ReGEXP,只匹配那些节点中的“REFs”。


我会让其他人尝试对regex部分给出具体的答案。

我同意ddaa,如果不先剥离html链接,几乎没有明智的方法来解决这个问题

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

例如,下面是我如何发现这个问题的(链接解决了这个问题,所以不用麻烦点击它!)

一些推特用户:@Codinghoror、@spolsky、@jarrod_dixon和@blam4c

在这种情况下,很容易:

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>");
var msg=“一些Twitter用户:@codinghorror、@spolsky、@jarrod_dixon和@blamm4c。http://bit.ly/2phvZ1";

var html=Regex.Replace(msg,“(?我同意ddaa,如果不先剥离html链接,几乎没有明智的方法来解决这个问题

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

例如,下面是我如何发现这个问题的(链接解决了这个问题,所以不用麻烦点击它!)

一些推特用户:@Codinghoror、@spolsky、@jarrod_dixon和@blam4c

在这种情况下,很容易:

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>");
var msg=“一些Twitter用户:@codinghorror、@spolsky、@jarrod_dixon和@blamm4c。http://bit.ly/2phvZ1";

var html=Regex.Replace(msg,“(?此regexp可能工作得更好:
/\B\@([\w\-]+)/gim


下面是一个JSFIDLE实例:

这个regexp可能工作得更好一些:
/\B\@([\w\-]+)/gim


下面是一个JSFIDLE的实际例子:

我担心你会这样说,因为这是我得出的相同结果;)我担心你会这样说,因为这是我得出的相同结果;)