ホームページ >ウェブフロントエンド >jsチュートリアル >並べ替えを改善するために JavaScript 文字列内のアクセント文字を効率的に置き換える方法

並べ替えを改善するために JavaScript 文字列内のアクセント文字を効率的に置き換える方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-30 10:43:21346ブラウズ

How to Efficiently Replace Accented Characters in a JavaScript String for Improved Sorting?

文字列内のすべてのアクセント付き文字を効率的に置き換えますか?

私は1 を探しています私の JavaScript クラスの文字列比較関数を改善しました。

現在、それらはstring.replace() を使用してグローバル (g) 検索を実行し、文字列 (p{InCombiningDiacriticalMarks}) 内のすべてのアクセント付き文字を基本形式 (NFD を使用した正規分解) に置き換えます。

入力文字列を検索します。アクセント付き文字が数文字あるだけでも、かなり広範囲のチャーンが発生します。また、より大きな入力を検索すると、パフォーマンスが低下する可能性があります。

より効率的な方法はありますか?これを達成するには?

[1] 編集 - 一般的な問題を明確にします。

この操作は、アクセント付きのドイツ語文字をアクセントなしの形式に変換するために行われます。 「間違った」順序の文字列 (例: ウムラウトが非ウムラウト "a" の前で終わる)、それらはローカルに従って適切にソートできます。

したがって、単にアクセント付き文字を検索し、アクセントのない同等の文字に置き換えるだけでは不十分です。アクセント付きの形式をその ベース に置き換える必要があります。

正規化が行われていない、または正しくない場合、間違った並べ替えが行われる可能性があります。 order.

[編集 2]

クライアント側でのほぼ照合正しいソートの貧しい人の実装には、JavaScriptが必要です効率的な単一文字置換を実行する関数string.

これが私が言いたいことです (これはドイツ語のテキストに適用され、他の言語ではソート方法が異なることに注意してください):

native sorting gets it wrong: a b c o u z ä ö ü
collation-correct would be:   a ä b c o ö u ü z

基本的に、指定されたテキストの "ä" のすべての出現が必要です。文字列は「a」に置き換えられます(など)。この方法では、ネイティブ ソートの結果は、ユーザーが期待するもの (またはデータベースが返すもの) に非常に近くなります。

他の言語には、まさにそれを行う機能があります。Python には str.translate() が用意されています。 Perl には tr/…/…/ があり、XPath には関数 translation() があり、ColdFusion には ReplaceList() があります。しかし、JavaScript はどうでしょうか?

現在私が持っているものは次のとおりです。

// s would be a rather short string (something like 
// 200 characters at max, most of the time much less)
function makeSortString(s) {
  var translate = {
    "ä": "a", "ö": "o", "ü": "u",
    "Ä": "A", "Ö": "O", "Ü": "U"   // probably more to come
  };
  var translate_re = /[öäüÖÄÜ]/g;
  return ( s.replace(translate_re, function(match) { 
    return translate[match]; 
  }) );
}

まず第一に、関数を呼び出すたびに正規表現が再構築されるという事実が好きではありません。この点ではクロージャが役に立つと思いますが、どういうわけかコツが掴めていないようです。

誰かもっと効率的なことを考えてくれませんか?


  1. 1

以上が並べ替えを改善するために JavaScript 文字列内のアクセント文字を効率的に置き換える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。