【发布时间】:2019-12-22 20:06:32
【问题描述】:
我正在构建一个标签转换器功能。每次用户单击输入或空间时,我都需要检查用户的文本中是否包含主题标签。我在这个正则表达式中使用了以前的答案:
HTML
<div class="post-input-field" contenteditable="true">My favourite dish is <a href=#>#sushi</a>#but I also like #pizza. </div>
JQuery
/**
* Trigger when someone releases a key on the field where you can post remarks, posts or reactions
*/
$(document).on("keyup", ".post-input-field", function (event) {
// if the user has pressed the spacebar (32) or the enter key (13)
if (event.keyCode === 32 || event.keyCode === 13) {
currentCommentText = currentCommentText.replace(/#(\w+)/g, "<a class='hashtag' href=" + url + " target='_blank'>$&</a> ").replace("<br>", ""); //replace hashtags with a link
textField.html(currentCommentText);
}
});
如果用户将每个唯一的主题标签都写一次,这会很好。但是,当用户键入两次相同的主题标签时,它也会在之前获取的主题标签前面添加链接。
如您所见,#sushi 和#pizza 后面有几个空格。如果我放大并检查为什么会发生这种情况:
您可以看到正则表达式并没有真正发挥作用。我听说使用正则表达式替换 html 不是很理想。有没有办法可以检查主题标签并仅替换文本中尚未转换的主题标签?
【问题讨论】:
标签: jquery html replace hashtag