[英]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
函數內進行匹配,因為該函數的第一個參數已經是當前匹配的子字符串。
編輯:如果要匹配標簽標簽之間沒有空格,則可以稍微修改一下正則表達式:
(?:|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|#|$)
這是使用純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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.