Последнее совпадение с Javascript @

#javascript #regex #twitter

#javascript #регулярное выражение #Twitter

Вопрос:

Я пытаюсь создать функцию автозаполнения для имен пользователей Twitter.

На данный момент у меня есть следующий код:

 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, как дела»

Я не уверен, как этого добиться. Искал в Google около 3 часов и все еще ничего не нашел.

Кроме того, было бы здорово указывать только последнее имя пользователя при его изменении.

Ответ №1:

Ваше регулярное выражение в порядке. Единственная проблема заключается в том, что обратная косая черта в строке будет удалена или заменена при анализе строки, вместо того, чтобы интерпретироваться анализатором регулярных выражений. Вам нужно повторно экранировать каждое из них дополнительной обратной косой чертой:

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

Вместо указания регулярного выражения с помощью строки и RegEx функции обычно следует использовать литерал регулярного выражения. Оно разделено обратной косой чертой вместо двойных кавычек, с добавлением флагов в конце:

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