1

Facebook で見られるような「先行入力」の友人/フォロワー機能を実装しています。

ユーザーがコメント ボックスに「@」キーを入力すると、次の 2 つの単語が、オートコンプリート リストをレンダリングするユーザー名の json 配列に対してチェックされる必要があります。

ユーザーが「@」を押したときに現在トリガーされているイベントが既にあります。これにより、完全なテキスト文字列が、照合を実行する別の関数に送信されます。このテキストを解析して、「@」に続くテキストを取得する必要があります。

したがって、実際の問題は、文字列内の「@」の直後に続くテキストをどのように取得できるかです。

一致は、文字列内の「@」の最後のオカレンスから抽出する必要があります。(ユーザーが入力した同じ文字列内で複数のオートコンプリートを許可するため。)

正規表現/JS文字列操作をよりよく理解している人が助けてくれることを願っています.

前もって感謝します。

編集:

いくつかの例を追加するだけです:

@John Smith says hello

返す必要があります:

John smith says hello    OR  simply 'John Smith' - Either is okay for this purpose

ただし、この文字列:

I was talking to @John Smith and he told me all about @Sarah Smith

のみを返す必要があります:

 Sarah Smith
4

3 に答える 3

2

それは大丈夫ですか ?

txt.substring(txt.lastIndexOf('@')+1).split(' ').slice(0, 2).join(' ')

デモ

于 2012-10-02T17:02:23.213 に答える
1

正規表現は使用せず、むしろlastIndexOfを使用します

私のコンソールから:

var a = "@tony @stark"
> undefined
var b = a.lastIndexOf('@')
> undefined
a.substr(b, a.length)
> "@stark"

または、必要に応じて

a.substr(b+1, a.length)
> "stark"

*更新

function getRest(a) {
  var b = a.lastIndexOf('@'); 
  return a.substr(b+1, a.length);
}
getRest('@John Smith says hello')
> "John Smith says hello"
getRest('I was talking to @John Smith and he told me all about @Sarah Smith')
> "Sarah Smith"
于 2012-10-02T17:02:20.540 に答える
0

正規表現は/@(\w+ \w+)[^@]*$/(@ 記号、2 つの単語、その後に @ 以外の文字が文字列の最後まで続く) になります。これが部分文字列/分割アプローチよりも速いかどうかはわかりません。

var regex = /@(\w+ \w+)[^@]*$/,
    myString = "@spork and @abe lincoln spam spam spam",
    match = myString.match(regex)[1];
// match == "abe lincoln"
于 2012-10-02T17:02:54.560 に答える