6

次のように、後にスペース文字がなく、前に @ がある単語に一致する JavaScript 正規表現が必要です。

@bug - "@bug" を見つけます。後ろにスペースがないためです。

@bug と私 - 「@bug」の後にスペースがあるため、何も見つかりません

@bug および @another - 「@another」のみを検索

@bug と @another と何か - 両方の単語の後にスペースが続くため、何も検出されません。

ヘルプ?追加: 文字列が取得され、FF はその末尾に独自のタグを配置します。基本的に@で始まる最後の単語だけでいいのですが、$(文字列の末尾)は使えません。

4

2 に答える 2

16

試してみてくださいre = /@\w+\b(?! )/。これは単語を検索し (単語全体をキャプチャすることを確認します)、否定先読みを使用して単語の後にスペースが続かないことを確認します。

上記の設定を使用して:

var re = /@\w+\b(?! )/, // etc etc

for ( var i=0; i<cases.length; i++ ) {
    print( re2.exec(cases[i]) )
}

//prints
@bug
null
@another
null

これが機能しない唯一の方法は、単語がアンダースコアで終わり、句読点を単語の一部にしたい場合です。たとえば、'@bug and @another_ blahblah' は @another を選択します@another。スペース。これはあまりありそうにありませんが、そのケースにも対処したい場合は、 and を使用してforおよびfor/@\w+\b(?![\w ]/を返すことができます。null@bug and @another_@bug_@another and @bug_

于 2011-12-21T05:18:15.510 に答える
5

入力の最後にある単語を探しているだけのようです。

/@\w+$/

テスト:

var re = /@\w+$/,
    cases = ['@bug',
             '@bug and me',
             '@bug and @another',
             '@bug and @another and something'];

for (var i=0; i<cases.length; i++)
{
    console.log(cases[i], ':', re.test(cases[i]), re.exec(cases[i]));
}

// prints
@bug : true ["@bug"]
@bug and me : false null
@bug and @another : true ["@another"]
@bug and @another and something : false null
于 2011-12-21T04:14:56.253 に答える