正则表达式匹配Twitter中的提及和主题标签

时间:2015-07-20 19:10:39

标签: javascript regex

我这里有这个JS:

return text.replace(/@([a-z\d_]+)/ig, '<a
href="?r=site/twitterprofile&q=$1">@$1</a>');

它获取所有Twitter提及,并输出每个链接。在同一个函数中,我想结合这个模式来获取所有的标签:

/\S*#\S+/gi

如何将这两者合并为一种模式?

1 个答案:

答案 0 :(得分:1)

您可以利用.replace()函数允许您传入函数以返回替换字符串这一事实:

return text.replace(/([@#])([a-z\d_]+)/ig, function(_, marker, tag) {
  if (marker === "@")
    return '<a href="?r=site/twitterprofile&q=$1">' + tag + '</a>';
  return "Hashtag: " + tag;
});

查找看起来像@标签或主题标签的内容,然后决定返回哪种替换。将函数传递给.replace()时,将调用该函数,使第一个参数(在上面的示例中忽略)是整个匹配。当您使用简单的字符串替换时,第二个和后续参数包含分组的子匹配,对应于$1$2等。因此,第一组是@#字符,第二组是匹配的文字。