1

我有一个自动完成的用户标记系统,可以填写 @ 符号之后的用户名。但是,我有这个问题,我有两个具有匹配子字符串的用户。例如:

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));
}
4

1 回答 1

3

不确定我是否完全理解您的问题。但是,只是为了让您知道,您可以使用负前瞻来仅替换最后匹配的文本,如下所示:

var str='@billy and @b';
str = str.replace(/@b\b(?!.*?@b\b)/, 'brendan');
于 2013-03-27T20:51:34.357 回答