替换正则表达式中的最后匹配

时间:2013-03-27 20:34:06

标签: javascript regex

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

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

1 个答案:

答案 0 :(得分:3)

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

var str='@billy and @b';
str = str.replace(/@b\b(?!.*?@b\b)/, 'brendan');