使用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;
答案 0 :(得分:4)
而不是/@(\S*)/g
使用/@(\w+)/gi
,因为Twitter用户名完全局限于\w
代表的内容:a-z
,0-9
和_
。正如本Twitter support article所述:
如上所述,用户名只能包含字母数字字符(字母A-Z,数字0-9),但下划线除外。检查以确保您所需的用户名不包含任何符号,短划线或空格。
var str = 'RT @stackoverflow: Great ...'
str = str.replace(/@(\w+)/gi, '<a target="_blank" href="https://twitter.com/$1">@$1</a>')
console.log(str)
&#13;
答案 1 :(得分:1)
\w
并不适合他们的需要。对于那些因任何原因需要使用\S
的人,可以将用户名包装在括号中,将其作为第二个引用分开,然后在替换语句中使用它。在这种情况下,它将是$2
而不是$1
。
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;