2011-11-12 54 views
1

我試圖爲twitter用戶名做一個自動完成的函數。Javascript匹配last @<User>

到目前爲止,我有以下代碼:

function OnKeyUp(txtboxid){ 
    var text = $('#'+txtboxid).val() 
    var regex = '(^|\s)@(\w*[a-zA-Z_]+\w*)' 
    var results = text.match(RegExp(regex, 'gm')) 
    console.debug(results) 
} 

的問題是,它只有文字時,它是在字符串的開頭匹配(如:@yser)

我想要什麼是一個正則表達式可以像這樣的字符串「你好@ user2,@user和@ user3你好嗎」

我不知道如何做到這一點。 搜索谷歌約3小時,現在仍然沒有發現。

此外,只有在最後一次用戶名被更改時纔會很棒。

回答

1

你的正則表達式很好。唯一的問題是字符串中的反斜槓將在解析字符串時被移除或替換,而不是由正則表達式解析器解釋。你需要額外的反斜線再逃避他們每個人:

var regex = '(^|\\s)@(\\w*[a-zA-Z_]+\\w*)'; 

除了指定一個字符串的正則表達式和RegEx功能,你通常應該使用正則表達式文本。它的反斜槓而不是雙引號分隔,並在末尾添加標誌:

var results = text.match(/(^|\s)@(\w*[a-zA-Z_]+\w*)/gm); 
+0

謝謝你現在工作正常:) – Brantje