2013-03-27 44 views
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)); 
} 
+1

您能告訴我們替換的代碼嗎? – 2013-03-27 20:35:44

+0

@ExplosionPills done – AlexQueue 2013-03-27 20:41:52

回答

3

不知道我是否完全理解你的問題。但是,只是爲了讓您知道,您可以使用負面視圖來替換最後匹配的文本,如下所示:

var str='@billy and @b'; 
str = str.replace(/@b\b(?!.*[email protected]\b)/, 'brendan'); 
+0

這很好,但你編輯'\ b'。你能解釋一下這是什麼嗎? – AlexQueue 2013-03-27 21:05:36

+0

爲了避免在匹配'@ sam'時避免與'@ samuals'匹配,我在文字邊界加了'\ b'。 – anubhava 2013-03-27 21:15:41