2016-07-15 3 views
0

アクセント文字が含まれている場合と含まれていない場合がある正規表現を試してみました。私は過去数日間これを研究してきましたが、問題を解決するために必要な情報を見つけることができません。アクセント文字を含む可能性のある単語を置換するJavascript正規表現

私は偉大なアクセント文字なしで単語を扱う簡単な正規表現を思い付いた:

var re = new RegExp('(?:\\b)hello(?:\\b)', 'gm'); 
var string = 'hello hello hello world hellos hello'; 
string.replace(re, "FOO"); 

結果:私が望むようFOO FOO FOO world hellos FOO

上記作品。上記のコードの問題は、単語にアクセント文字が文字列の最初または最後の文字として含まれている場合です。例:

var re = new RegExp('(?:\\b)helló(?:\\b)', 'gm'); 
var string = 'helló helló helló world hellós helló'; 
string.replace(re, "FOO"); 

結果:helló helló helló world FOOs helló

望ましい結果:アクセント文字を境界として解釈されているため、私の理解からFOO FOO FOO world hellós FOO

は、上記発生しています。問題を解決するために私の試みは(注意:範囲[A-zÀ-ÿ]は、私は言葉を構築するために有効なアルファベットを考えるものである):

var re = new RegExp('([^A-zÀ-ÿ]|^)helló([^A-zÀ-ÿ]|$)', 'gm'); 
var string = 'helló helló helló world hellós helló'; 
string.replace(re, "$1FOO$2"); 

結果:あなたが見ることができるようFOO helló FOO world hellós FOO

、私はにかなり近いですよ希望の結果。ただし、問題の単語が3回以上連続して表示される場合に問題が発生します。 hellóの2番目のオカレンスは無視されました。私は、その前の空白が既に最初の出現であるhellóと一致していたからだと思います。

FOO FOO FOO world hellós FOOの達成方法に関する提案はありますか?

+0

http://stackoverflow.com/questions/5436824/matching-accented-characters-with-javascript-regexesの重複はありますが、確認するまではハマーを使用していません。 – mplungjan

+0

要件が何であるかを正確に説明できますか単語にマッチする?文字列内の任意のインスタンスまたは特定の場所で置き換えられますか。だからその正規表現の代わりに 'helló\ B'なぜですか? – 10100111001

答えて

2

答えは少し複雑ですが、あなたはこの問題に苦労している理由として、以下に回答されていますWhy can't I use accented characters next to a word boundary?

しかし、(特にはECMAScript 6の前に、JavaScriptで良いUnicodeのサポートの欠如を与えられました私は過去に自分自身でこの問題を抱えていた)。私は多くの場合、次のような優れたユニコードサポートを備えたサードパーティのライブラリを使用するほうがよいことが分かっています。http://xregexp.com/

これにより、古いブラウザのサポートの違いが取り除かれます。

関連する問題