我有一个自动完成的用户标记系统,用于填写@符号后面的用户名。我有这个问题,我有两个匹配子字符串的用户。例如:
Tagging @billy and @b
当用户使用名为(例如)@brendan的用户填写@b标记时,它将替换@billy标记。如何倒退并仅替换最后一个标签?
编辑:这是我目前的解决方案,但感觉很糟糕。有没有办法只用RegEx做到这一点?:
function tagUser (chosenUsername) {
var userRegex = new RegExp('(^|\\s)@([' + lastUserTag() + ']*)$', 'gi');
var caption = $("#example").val();
var match = caption.match(userRegex);
var lastMatch = match[match.length - 1];
$("#example").val(caption.replace(lastMatch, " @" + chosenUsername));
}
答案 0 :(得分:3)
不确定我是否完全理解你的问题。但是,只是为了让您知道,您可以使用否定前瞻来替换最后匹配的文本,如下所示:
var str='@billy and @b';
str = str.replace(/@b\b(?!.*?@b\b)/, 'brendan');