2

私のプロジェクトでは、で表される場合は常にテキスト(ユーザー名のみ)を強調表示しようとしています@。私は次の関数を使用しています:

function replaceMessage(data, username) {
    return data.replace("@" + username, "<strong>@" + username + "</strong>");
}

この上記の関数は機能していますが、「Sam」や「Samuel」などの名前の有効なユーザーが2人いる場合、関数を適用した後の結果は次のようになります:

           SamSamuel (の代わりにSamuel)。

この問題を解決するにはどうすればよいですか?

正規表現の使い方はあまり得意ではないので、IE8では動作しない以下の機能を試してみました。

function replaceMessage(data, username) {
    return data.replace(/\b + "@" + username + /g, "<strong>@" + username + "</strong>");
}
4

1 に答える 1

3

\b正規表現の単語区切りを示す特別な記号が必要になります。

function replaceMessage(data, username) {
    var re = new RegExp('@' + username + '\\b', 'g');
    return data.replace(re, "<strong>$0</strong>");
}
于 2013-01-10T10:58:53.977 に答える