繁体   English   中英

使用JavaScript在链接中包装多个主题标签

[英]Using JavaScript to wrap multiple hashtags in links

经过数小时的谷歌搜索,搜索Stack Exchange以及反复试验后,我无法解决这个问题。 任何帮助将不胜感激!

我正在尝试用链接替换段落中的主题标签。 我已经可以使用以下方法做到这一点:

var str = $('.item p').html(),
  regex = /(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/gi;

function replacer(){
  var replacementString = $.trim(str.match( regex )[0]);
  return ' <a href="https://www.example.com/'+ replacementString +'" target="_blank">' + replacementString + '</a>';
}
$('.item p').html( str.replace( regex , replacer ) );

这将成功替换井号,但是当我使用[0]时,如果存在多个井号,则仅将井号替换为第一个井号。 这是到目前为止我拥有的JSFiddle 我需要尝试弄清楚如何用指向该特定主题标签的链接替换每个主题标签。

我不确定是否应该使用循环并递增[0],还是在这里完全朝错误的方向前进,还有一种更简单的方法可以做到这一点。

如果有人比我有任何指针,我将不胜感激!

约翰

在您的函数上进行如下简单更改即可完成您想要的操作:

function replacer(hash){
  var replacementString = $.trim(hash);
  return ' <a href="https://www.example.com/'+ replacementString +'" target="_blank">' + replacementString + '</a>';
}

在您的情况下,无需在.replace调用的replacer函数内进行匹配,因为该函数的第一个参数已经是当前匹配的子字符串。

JSFiddle演示

编辑:如果要匹配标签标签之间没有空格,则可以稍微修改一下正则表达式:

(?:|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|#|$)

更新的JSFiddle演示

这是使用纯JavaScript的方法:

String.prototype.parseHashtag = function() {
    return this.replace(/[#]+[A-Za-z0-9-_]+/g, function(t) {
        var tag = t.replace("#","")
        return '<a href="https://www.example.com/'+ tag + '" target="_blank">' + tag + '</a>';
    });
};

var input = "some randomg string #something some text";

console.log(input.parseHashtag()); // some randomg string <a href="https://www.example.com/something" target="_blank">something</a> some text

jsFiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM