【问题标题】:Regex to match mentions and hashtags in Twitter正则表达式匹配 Twitter 中的提及和主题标签
【发布时间】:2015-07-20 19:10:38
【问题描述】:

我这里有这个 JS:

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

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

/\S*#\S+/gi

如何将这两者组合成一个模式?

【问题讨论】:

  • 你为什么使用replace
  • 您只想在@提及中添加主题标签?只需按顺序应用它们。

标签: javascript regex


【解决方案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 等。因此第一组是@# 字符,第二组是匹配的文本。

【讨论】:

    猜你喜欢
    • 2011-03-08
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多