我这里有这个JS:
return text.replace(/@([a-z\d_]+)/ig, '<a
href="?r=site/twitterprofile&q=$1">@$1</a>');
它获取所有Twitter提及,并输出每个链接。在同一个函数中,我想结合这个模式来获取所有的标签:
/\S*#\S+/gi
如何将这两者合并为一种模式?
答案 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
等。因此,第一组是@
或#
字符,第二组是匹配的文字。