Javascript正则表达式匹配Twitter用户名,但排除冒号

时间:2016-06-10 23:27:07

标签: javascript regex

使用Twitter API我试图将任何@符号链接到个人帐户,例如。 @stackoverflow转到https://twitter.com/stackoverflow

除了我正在查看具有语法

的转推时,这在以下情况下工作得很好
RT @stackoverflow:

第一个正则表达式运行良好,但它保留了:所以如果它是:,我想删除最后一个字符。如何匹配@stackoverflow模式,但从中移除:。 (我不想从整个字符串中删除:,因为它也可能包含链接)



var str = 'RT @stackoverflow: Great ...'
	str = str.replace(/@(\S*)/g, '<a target="_blank" href="https://twitter.com/$1">@$1</a>')
	str = str.replace(/:$/,"") //doesn't do anything
	console.log(str) // returns RT <a target="_blank" href="https://twitter.com/stackoverflow:">@stackoverflow:</a> Great ...
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:4)

而不是/@(\S*)/g使用/@(\w+)/gi,因为Twitter用户名完全局限于\w代表的内容:a-z0-9_ 。正如本Twitter support article所述:

  

如上所述,用户名只能包含字母数字字符(字母A-Z,数字0-9),但下划线除外。检查以确保您所需的用户名不包含任何符号,短划线或空格。

&#13;
&#13;
var str = 'RT @stackoverflow: Great ...'

str = str.replace(/@(\w+)/gi, '<a target="_blank" href="https://twitter.com/$1">@$1</a>')
	
console.log(str) 
&#13;
&#13;
&#13;

答案 1 :(得分:1)

@ trincot的答案很有效(我付了一票),但我会为遇到这种情况的人添加我的答案,而\w并不适合他们的需要。对于那些因任何原因需要使用\S的人,可以将用户名包装在括号中,将其作为第二个引用分开,然后在替换语句中使用它。在这种情况下,它将是$2而不是$1

&#13;
&#13;
var str = 'RT @stackoverflow: Great ...'
str = str.replace(/@((\S*):)/g, '<a target="_blank" href="https://twitter.com/$2">@$1</a>')
str = str.replace(/:$/,"") //doesn't do anything
console.log(str)
&#13;
&#13;
&#13;