2017-05-03 29 views
2

Javascriptを使用してアクセント付きのアクセント付きのバージョンと一致しない正規表現を使用する方法を探しています。私はオートコンプリートで言葉を中心に大胆なhtmlタグを追加するためのjQuery-UIのオートコンプリートを延長していJavascriptアクセント記号とアクセント記号のないバージョンの文字列と一致する正規表現

は、ここに私のコードです:私は(例えば)モントリオールを書く場合は、今

<script> 
// Add feature to autocomplete to make the searched query in bold letter 
    $.extend($.ui.autocomplete.prototype, { 
     _renderItem: function (ul, item) { 
      var searchMask = this.element.val(); 
      var replaceMask = "<b style=\"\">$&</b>"; 
      var splittedMask = searchMask.split(' '); 
      var html = regEx = ''; 
      // Fix I added so it works with multiple words. 
      splittedMask.forEach(function(word){ 
       if (word.length >= 2){ 
        // Here is the part that should interest you 
        regEx = new RegExp(word, "ig"); 
        if (html == ''){ 
         html = item.label.replace(regEx, replaceMask); 
        } else { 
         html = html.replace(regEx, replaceMask); 
        } 
       } else { 
        html = item.label; 
       } 
      }); 

      return $("<li></li>") 
       .data("item.autocomplete", item) 
       .append($("<span></span>").html(html)) 
       .appendTo(ul); 
     } 
    }); 
</script> 

だから、それが動作し、私のメニューでモントリオールを見つけますが、モントリオールを書くとRegExで見つけられません。

私はオンラインで見ましたが、正しい正規表現が見つかりませんでした。

+1

入力を最初に正規化する必要があります。これは 'é'と' e'を一致させる方法がないためです。あなたはすべての 'e'をパターン内の' [ee] 'に置き換えることを検討するかもしれません。 –

+0

@WiktorStribiżewそれは実際には良いアイデアの男です、私は[ee]とa [aà]にそれをしました。あなたはそれを使って答えを出さなければならない私はそれが私の問題の良い解決だと信じている –

+0

私はこの提案で答えを加えました。 –

答えて

1

があるので、あなたはnormalizing the input firstを検討するかもしれません正規表現でéeを一致させる方法はありません。

また、eをすべてあなたのパターンに置き換えることをお勧めします(リテラル文字列からパターンを作成するだけで安全です)。キーを使用して文字を検索する連想配列や、アクセント付きのすべてのパターンに一致する文字クラスを含む値を使用できます。

2

これは簡単ではありません。基本的に、アクセント付きの文字をアクセント記号のないバージョンで置き換えてから、RegExに渡すことが唯一の方法です。

この記事では、いくつかのサンプルコード(セクション「男ねえ、私はコピー/ペーストにだけここにいる」を探してください)、プラスの注意事項をたくさん持っている:Accent Folding for Auto-Complete

+0

私は悲しみの前にそれがアクセントを取り除いてから検索を試みたが、私のモントリオールは見つからず、モントリオールだけが見つかる –

関連する問題