ホームページ >ウェブフロントエンド >jsチュートリアル >インテリジェントストリングの略語

インテリジェントストリングの略語

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-02-24 08:48:14874ブラウズ

Intelligent String Abbreviation

コアポイント

    JavaScriptの
  • 関数は、文字列を指定された最大長に知的に短縮し、単語の中央で壊れないようにし、不要なスペースを削除します。 abbreviate()
  • この関数は、略語文字列の最後に追加された元の入力文字列、最大出力長、およびオプションのサフィックスの3つのパラメーターを取ります。接尾辞が定義されていない場合、デフォルトは「...」であり、略語を示します。
  • この関数は、フォーム入力の処理、カスタムツールチップの作成、Webベースのメールリストにメールのトピックの表示、Ajaxを介して送信される前処理データなど、文字列の長さを制限する必要があるシナリオで使用できます。
  • この関数の有効性は、入力文字列を1つの単語に分割し、最大長に合うようにできるだけ多くの単語を再結合できることです。また、入力を前処理して、余分なスペースを削除します。
  • この記事では、主な関数がその名前として、文字列を指定された長さに短縮するシンプルで効率的なJavaScript関数を導入します。単語の中央で切り捨てられず、ストリングを前処理して余分なスペースを削除することが保証されます。以下は、
  • 関数のコードです。

この関数は、略語文字列の最後に追加された元の入力文字列、最大出力長、およびオプションのサフィックスの3つのパラメーターを取ります。接尾辞が定義されていない場合、デフォルトは「...」(1つのスペースの後に3つのドットが続く)です。 abbreviate() abbreviate

関数の使用
<code class="language-javascript">function abbreviate(str, max, suffix) {
  if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) {
    return str;
  }

  var
    abbr = '',
    str = str.split(' '),
    suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'),
    max = (max - suffix.length);

  for (var len = str.length, i = 0; i < len; i++) {
    if ((abbr + str[i]).length <= max) {
      abbr += str[i] + ' ';
    } else {
      break;
    }
  }

  return abbr.replace(/[ ]$/g, '') + suffix;
}</code>

この関数は、単純な

式に代わるよりスマートな代替品として、文字列の長さを制限する必要があるシナリオで使用できます。フォーム入力の処理、カスタムツールチップの作成、Webベースのメーリングリストにメールのトピックの表示、Ajaxを介して送信されるプリプセッシングデータなど、多くのアプリケーションがあります。たとえば、文字列を100文字に制限してデフォルトのサフィックスを追加するには、次のように呼びます。 これは、この

式:

と概念的に同等です substr <

関数はこれを行わないように設計されており、単語の中央に分割する代わりに、最後の単語の前に文字列を分割します。したがって、
<code class="language-javascript">str = abbreviate(str, 100);</code>
で生成された出力文字列は通常、

で指定されている最大長よりもsubstr

<code class="language-javascript">str = str.substr(0, 96) + " ...";</code>
この出力を生成します:

<code class="language-javascript">function abbreviate(str, max, suffix) {
  if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) {
    return str;
  }

  var
    abbr = '',
    str = str.split(' '),
    suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'),
    max = (max - suffix.length);

  for (var len = str.length, i = 0; i < len; i++) {
    if ((abbr + str[i]).length <= max) {
      abbr += str[i] + ' ';
    } else {
      break;
    }
  }

  return abbr.replace(/[ ]$/g, '') + suffix;
}</code>

関数の仕組み

abbreviate関数のキーは、入力文字列を単語に分割し、最大長に合うようにできるだけ多くの単語を再結合する機能です。より効率的になるには、単語間のセパレーターが予測可能であることを確認する必要があります。最も簡単な方法は、内部空間を最小限に抑えることです。新しいラインとタブをスペースに変換し、次に連続したスペースを縮小して、各内部スペースが空間になるようにすることです。 。もちろん、これに対処する他の方法もあります。たとえば、単語の間に見られるすべての異なるタイプのキャラクターを考慮したセグメンテーションのためのより柔軟な正規表現を定義できます。正規表現には単語の境界文字(「B」)もありますので、同様に使用できます。しかし、特にユーザーの入力を処理するときに、スペース前処理自体が有用であることがわかりました。また、単語の境界で分割しても、ダッシュ、ドット、コンマ、およびほとんどの特殊文字が実際に単語の境界と見なされるため、予想される結果は生成されません。しかし、キャラクターのスペースが続いていない限り、句読点で単語を分割することは不適切だと思います。したがって、関数の最初の仕事は、スペースの前処理を行うことです。その後、結果で指定されている最大値よりも既に短い場合、直接返すことができます。

<code class="language-javascript">str = abbreviate(str, 100);</code>
これを行わない場合、弦が略される必要がないときに略奪が省略される状況に遭遇する可能性があります。

最初の条件がない場合、指定された最大値に接尾辞の長さを考慮に入れる必要があるため、略語の出力が得られます。
<code class="language-javascript">str = str.substr(0, 96) + " ...";</code>

最初の条件を追加すると、変更されていない出力が生成されます。

この時点で戻っていない限り、略式文字列をコンパイルし続けます - 入力文字列をスペースごとに分割して単語を作成し、略語が短い限り各単語空間ペアを繰り返し再編成します指定された最大長より。必要なものをコンパイルしたら、反復を破り、略語文字列の端から残りのスペースをトリミングし、接尾辞を追加して結果を返すことができます。残りのスペースを右端からトリミングしてから、デフォルトの接尾辞で追加すると、少し無駄に思えますが、これによりスペースなしで接尾辞を入力できます。
<code class="language-javascript">abbreviate("<p>One two three four five</p>", 15, "");</code>

結論
<code class="language-html"><p>One two></code>

これは、過剰なスペースを削除するために入力を前処理するシンプルだがスマートな文字列の略語関数です。私の経験では、両方の要件が通常同時に表示されるため、このように機能するようにこの機能を開発しました。

(スペースの制限のため、FAQパーツはここで省略されています。必要に応じて、FAQパーツの擬似オリジナルバージョンを個別に提供できます。)

以上がインテリジェントストリングの略語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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