我正在尝试编写一个小部件来整理来自多个来源的推文作为练习(类似的东西存在这里,但是a)那里提供的列表选项没有加载我的任何列表,并且b)这是一个有用的学习练习!)。作为其中的一部分,我想编写一个正则表达式,用指向用户 Twitter 页面的链接替换 Twitter 句柄('@' 后跟字符)。但是,我不希望出现误报,例如,推文中的电子邮件地址。
因此,例如,替换应该发送
Hey there @twitteruser, my email address is address@gmail.com
到
Hey there <a href="http://twitter.com/twitteruser">@twitteruser</a>, my email address is address@gmail.com
在这个问题的指导下,这表明我需要某种方式在 Javascript 中复制负面的后视,我编写了以下代码:
tweetText = tweetText.replace(/(\S)?@([^\s,.;:]*)/ig, function($0, $1){
return $1 ? $0 + '@' + $1 : '<a href="http://www.twitter.com/' + $0 + '">@' + $0 + '</a>'
});
但是,在触发三元运算符的最后部分的情况下,$0 包含“@”符号。这出乎我的意料——因为 '@' 没有括在括号中,我希望 $0 匹配 '([^\s,.;:]*)' - 即 Twitter 用户的用户名(之后,和没有,'@')。我可以通过使用 $0.substring(1) 获得所需的功能,但我想进一步了解。
有人可以指出我误解了什么吗?我对正则表达式很陌生,从来没有用 Javascript 编写过它们,也没有使用过负面的后视。