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

经过几个小时的谷歌搜索后,我正在用头撞击墙壁,搜索Stack Exchange并试错,我无法弄明白。 任何帮助将非常感谢!

我正在尝试用链接替换段落中的主题标签。 我已经能够通过使用以下内容来做到这一点:

var str = $('.item p').html(), regex = /(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/gi; function replacer(){ var replacementString = $.trim(str.match( regex )[0]); return ' ' + replacementString + ''; } $('.item p').html( str.replace( regex , replacer ) ); 

这会成功替换主题标签,但是当我使用[0]时,如果有多个主题标签,那么它只用第一个标签替换主题标签。 这是我迄今为止所拥有的JSFiddle 。 我需要尝试弄清楚如何用指向该特定主题标签的链接替换每个主题标签。

我不确定我是否应该使用循环并递增[0]或者我是否在这里完全错误的方向,并且有更简单的方法来执行此操作。

如果有人有任何指针,我真的很感激!

约翰

在您的函数上进行这样的简单更改将执行您想要的操作:

 function replacer(hash){ var replacementString = $.trim(hash); return ' ' + replacementString + ''; } 

在这种情况下,不需要在.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 '' + tag + ''; }); }; var input = "some randomg string #something some text"; console.log(input.parseHashtag()); // some randomg string something some text 

见jsFiddle