ホームページ ウェブフロントエンド jsチュートリアル js_javascript スキルのスペースを削除する 12 の実践的な方法

js_javascript スキルのスペースを削除する 12 の実践的な方法

May 16, 2016 pm 05:16 PM

実装 1
コードをコピー コードは次のとおりです:

文字列.prototype.trim = function() {
return this.replace(/^ss*/, '').replace(/ss*$/, '');

見た目はあまり良くありません。通常の置換を 2 つ使用しています。主にブラウザの内部最適化により、実際の速度は非常に優れています。有名な例は文字列の結合です。Array で作成した StringBuffer よりも直接加算した方が高速です。 Base2 クラス ライブラリはこの実装を使用します。


実装 2
コードをコピー コードは次のとおりです:
String.prototype.trim = function() {
return this.replace(/^s /, '').replace(/s $/, '');
}

実装 1 と非常に似ていますが、主に少なくとも 1 つの空白文字があることを最初に前提としているため、実装 1 よりも若干遅くなります。 Prototype.js はこの実装を使用しますが、Prototype のメソッドは Ruby と同じ名前を持つように努めているため、その名前はstrip です。


実装 3

String.prototype.trim = function() {
return this.substring(Math.max(this.search(/S/), 0),this.search(/Ss*$/) 1 );
}


空白部分をインターセプトで取得し(もちろん途中の空白文字も可)、合計4つのネイティブメソッドが呼び出されます。非常に巧妙に設計されており、部分文字列はパラメータとして 2 つの数値を取ります。 Math.max はパラメータとして 2 つの数値を受け取り、検索では 1 つの数値が返されます。上の 2 つよりは少し遅いですが、以下のほとんどのものよりは高速です。


実装 4

String.prototype.trim = function() {
return this.replace(/^s |s $/g, '')
}


This上記の実装 2 の簡略化されたバージョンでは、候補演算子を使用して 2 つの正規表現を接続します。ただし、そうすることでブラウザの最適化の機会が失われ、3 を実装するほどではありません。見た目がエレガントなので、JQuery や mootools など、多くのライブラリで使用されています。


実装 5

String.prototype.trim = function() {
var str = this;
str = str.match(/S ( ? :s S )*/);
return str[0] : '';


match は、一致する元の文字列の部分を返します。要件はその要素になることです。文字列の途中にある空白文字が除外されないようにするには、非キャプチャ グループ化 (?:exp) を使用する必要があります。配列は空である可能性があるため、後でさらに決定を下す必要があります。ブラウザはグループ分けの処理が比較的弱いようで、1単語が遅いです。したがって、規則性は基本的に全能ですが、規則性について迷信を持たないでください。

実装 6


コードをコピー コードは次のとおりです: String.prototype.trim = function() {
return this.replace(/^s*(S*(s S )*)s*$/, '$1');


要件を満たす部分を提供し、空の文字列に入れます。ただし、特に IE6 では効率が非常に悪くなります。

実装 7



コードをコピー
コードは次のとおりです: String.prototype.trim = function() { return this.replace(/^s*(S*(?:s S )*)s*$/, '$1'); >}

これは実装 6 と非常に似ていますが、非キャプチャ グループ化を使用してそれを利用し、パフォーマンス効率がわずかに向上しています。


実装 8



コードをコピー
コードは次のとおりです: String.prototype.trim = function() { return this.replace(/^s*((?:[Ss]*S)?)s*$/, '$1'); 🎜>}

上記の 2 つのアイデアに沿って、非キャプチャ グループと文字セットを使用し、* の代わりに ? を使用して改良すると、その効果は驚くべきものになります。特に IE6 におけるこのパフォーマンス向上は、Firefox を直接破壊する狂気の沙汰と言えるでしょう。

実装 9
コードをコピー コードは次のとおりです:

String.prototype.trim = function() {
return this.replace(/^s*([Ss]*?)s*$/, '$1'); >

今回は、Firefox で改善された非キャプチャ グループ化の代わりに遅延マッチングが使用されますが、前回ほどクレイジーではありません。


実装 10

String.prototype.trim = function() {
var str = this,
whitespace = 'nrtfx0bxa0u2000u2001u2002u2003u2004u2005u2006u2007u2008u2009u200au200bu2028u 2029u3000' ;
for (var i = 0,len = str.length; i if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
}
for (i = str.length - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i 1);
break;
}
}
return Whitespace.indexOf(str.charAt(0)) === -1 ? str : ' ';
}


言いたいのは、これを作った人はもはや牛とは言えず、もはや神のレベルに達しているということです。まず、考えられるすべての空白文字をリストし、最初の走査で前の空白文字を切り取り、2 番目のパスで後続の空白文字を切り取ります。プロセス全体では、文字列を処理するために特別に設計されたネイティブ メソッドである、indexOf と substring のみを使用し、正規表現は使用しません。速度は驚くほど速く、内部バイナリ実装に近いと推定されており、IE と Firefox (もちろん他のブラウザでも) で良好なパフォーマンスを発揮します。速度はゼロミリ秒です。

実装 11



コードをコピー
コードは次のとおりです: String.prototype.trim = function() { var str = this,
str = str.replace(/^s /, '');
for (var i = str) .length - 1; i >= 0; i--) {
if (/S/.test(str.charAt(i))) {
str = str.substring(0, i 1) ;
break;
}
}
return str;


実装 10 は、通常のネイティブ文字列インターセプト メソッドよりもはるかに優れていることを示しています。交換ですが、少し複雑です。ただし、正規表現が複雑すぎない限り、ブラウザの正規表現の最適化を使用して、IE で 8 のパフォーマンスを達成するなど、プログラムの実行効率を向上させることができます。空白の実装は長すぎて覚えにくいため、通常、プロジェクトで実装 10 を使用する人はいないと思います (もちろん、クラス ライブラリを構築している場合は、間違いなく最初の実装です)。 Implementation 11 は改良版と言えます。前部の空白は定期的な置き換えによってカットされ、後部はネイティブな方法で処理されます。効果は元のバージョンに劣りませんが、速度は非常に高速です。 。


実装 12



コードをコピー
コードは次のとおりです: String.prototype.trim = function() { var str = this, str = str.replace(/^ss*/, ''),
ws = /s/ ,
i = str.length;
while (ws.test(str.charAt(--i)));
return str.slice(0, i 1); >

実装 10 と実装 11 は、記述の点で優れており、改良されたバージョンです。これはパフォーマンスや速度に関するものではなく、記憶と使いやすさに関するものであることに注意してください。その 2 つの前任者はどちらもゼロミリ秒レベルであり、今後はこれを仕事や脅迫に使用します。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptの文字列文字を交換します JavaScriptの文字列文字を交換します Mar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

8見事なjQueryページレイアウトプラグイン 8見事なjQueryページレイアウトプラグイン Mar 06, 2025 am 12:48 AM

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

独自のAjax Webアプリケーションを構築します 独自のAjax Webアプリケーションを構築します Mar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10 jQueryの楽しみとゲームプラグイン 10 jQueryの楽しみとゲームプラグイン Mar 08, 2025 am 12:42 AM

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

jQuery Parallaxチュートリアル - アニメーションヘッダーの背景 jQuery Parallaxチュートリアル - アニメーションヘッダーの背景 Mar 08, 2025 am 12:39 AM

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

Ajaxを使用して動的にボックスコンテンツをロードします Ajaxを使用して動的にボックスコンテンツをロードします Mar 06, 2025 am 01:07 AM

このチュートリアルでは、Ajaxを介してロードされた動的なページボックスの作成を示しており、フルページのリロードなしでインスタントリフレッシュを可能にします。 JQueryとJavaScriptを活用します。カスタムのFacebookスタイルのコンテンツボックスローダーと考えてください。 重要な概念: ajaxとjquery

JavaScript用のクッキーレスセッションライブラリを作成する方法 JavaScript用のクッキーレスセッションライブラリを作成する方法 Mar 06, 2025 am 01:18 AM

このJavaScriptライブラリは、Cookieに依存せずにセッションデータを管理するためにWindow.nameプロパティを活用します。 ブラウザ全体でセッション変数を保存および取得するための堅牢なソリューションを提供します。 ライブラリは、セッションの3つのコア方法を提供します

See all articles