22

JavaScript の場合:

"ab abc cab ab ab".replace(/\bab\b/g, "AB");

正しく私に与えます:

"AB abc cab AB AB"

ただし、utf-8文字を使用する場合:

"αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB");

単語境界演算子が機能していないようです:

"αβ αβγ γαβ αβ αβ"

これに対する解決策はありますか?

4

5 に答える 5

27

単語境界アサーションは、単語文字の前または後に別の単語文字が存在しない場合にのみ一致します (つまり、and と.\b.等しい)。そしてとして定義されます。したがって、ギリシャ文字には一致しません。したがって、この場合には使用できません。\W\w\w\W\w[A-Za-z0-9_]\w\b

代わりにできることは、これを使用することです:

"αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB")
于 2010-05-21T11:06:18.967 に答える
2

すべての Javascript 正規表現実装が Unicode 広告をサポートしているわけではないため、エスケープする必要があります

"αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB"

文字のマッピングについては、http://htmlhelp.com/reference/html40/entities/symbols.htmlをご覧ください。

もちろん、これは単語の境界の問題には役立ちませんが(他の回答で説明されているように)、少なくとも文字を適切に一致させることができるはずです

于 2010-05-21T11:18:28.330 に答える
2

プログラム可能で、句読点や括弧などを処理するものが必要でした。

http://jsfiddle.net/AQvyd/

var wordToReplace = '買い手',
    replacementWord = '[[BUYER]]',
    text = 'Mange 買い手 information. The selected Store and Classification will be the default on the สั่งซื้อ.'

function replaceWord(text, wordToReplace, replacementWord) {
    var re = new RegExp('(^|\\s|\\(|\'|"|,|;)' + wordToReplace + '($|\\s|\\)|\\.|\'|"|!|,|;|\\?)', 'gi');
    return text.replace(re, replacementWord);
}

私は JavaScript リソース エディターを作成したので、Unicode でうまく機能する単語境界のパラメーター化された正規表現が見つからなかったため、このページを見つけ、必要に応じて回答しました。

于 2013-03-13T05:29:35.273 に答える
1

Unicode や自然言語の単語を扱っている場合、単に\b. 詳細と手順については、この回答を参照してください。

于 2010-11-18T13:40:09.880 に答える
1

Javascript エンジンに関連付けられた RegEx のすべての実装が Unicode を認識しているわけではありません。

たとえば、IE で使用する Microsoft の JScript は ANSI に制限されています。

于 2010-05-21T11:06:20.293 に答える