単純な正規表現の一致で多くの問題が発生しています。
この文字列にアクセント付きの文字があり(これは単なる例です)"Botó Entrepà Nadó Facebook! "
、別のリストの単語を使用して単語を照合したいと思います。
これは私のコードの簡略版です。たとえば、「Botó
」と一致させる
var matchExpr = new RegExp ('\\b' + 'Botó' + '\\b','i');
"Botó Entrepà Nadó Facebook! ".match(matchExpr);
実行すると、期待どおりに「」と一致しませんBotó
(Firefox、IE、Chrome)。
私はそれが私の側のエラーだと思った。しかし、ここに楽しみがあります...
このように文字列を変更し(「」の後"Botón Entrepà Nadó Facebook! "
の「」に注意してください)、同じコードを実行すると、次のようになります。n
Botó
var matchExpr = new RegExp ('\\b' + 'Botó' + '\\b','i');
"Botón Entrepà Nadó Facebook! ".match(matchExpr);
「」に一致しますBotó
!!!!????? (少なくともFirefoxでは)。「」は単語の境界ではないため、これは私には意味n
がありません(これはによって一致し\b
ます)。
単語全体を一致させようとすると:
var matchExpr = new RegExp ('\\b' + 'Botón' + '\\b','i');
"Botón Entrepà Nadó Facebook! ".match(matchExpr);
できます。
もう少し奇妙にするために、最後に別のアクセント付き文字を追加します。
var matchExpr = new RegExp ('\\b' + 'Botóñ' + '\\b','i');
"Botóñ Entrepà Nadó Facebook! ".match(matchExpr);
これを一致させようとすると、何も一致しません。しかし、これを試してみると
var matchExpr = new RegExp ('\\b' + 'Botóñ' + '\\b','i');
"Botóña Entrepà Nadó Facebook! ".match(matchExpr);
「」と一致しBotóñ
ます。どちらが間違っています。
「Facebook」と一致させようとすると、期待どおりに機能します。中央にアクセントのある単語を一致させようとすると、期待どおりに機能します。しかし、最後にアクセントのある単語を一致させようとすると失敗します。
私は何が間違っているのですか?これは予想される動作ですか?