ホームページ >ウェブフロントエンド >jsチュートリアル >インテリジェントストリングの略語
コアポイント
abbreviate()
この関数は、略語文字列の最後に追加された元の入力文字列、最大出力長、およびオプションのサフィックスの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>で生成された出力文字列は通常、
で指定されている最大長よりも
<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 サイトの他の関連記事を参照してください。