[解決済み] JavaScriptにおけるendsWith
質問
JavaScriptで、ある文字列が特定の文字で終わっているかどうかを調べるにはどうしたらいいですか?
例 ある文字列
var str = "mystring#";
その文字列の末尾が
#
. どうすれば確認できますか?
-
はあるのでしょうか?
endsWith()
というメソッドをJavaScriptで作成することはできますか? -
私が持っている1つの解決策は、文字列の長さを取り、最後の文字を取得し、それをチェックすることです。
これがベストな方法なのか、それとも他に方法があるのでしょうか?
解決方法は?
UPDATE (2015年11月24日)です。
この回答は2010年に投稿されたものなので、この洞察に満ちたコメントを参考にしてください。
- シャウナ -
<ブロッククオートGooglerのための更新 - ECMA6がこの機能を追加したようです。MDN の記事ではポリフィルも紹介されています。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
この回答が投稿された2010年当時は、そうだったかもしれません。最近では、単純な
this.substr(-suffix.length) === suffix
Chrome では最速、IE11 では indexOf と同じ、Firefox ではわずか 4% 遅い (fergetaboutit の領域) です。
jsperf.com/endswith-stackoverflow/14
また、結果が偽の場合は、全体的に速くなります。
jsperf.com/endswith-stackoverflow-when-false(スタックオーバーフローが発生した場合)。
もちろん、ES6でendsWithが追加されたので、この点は無意味です。:-)
オリジナルの回答です。
これは1年前の質問ですが...私もこれが必要で、クロスブラウザで動作する必要があるので...。 みんなの答えとコメントを組み合わせる と少し簡略化しています。
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
- 部分文字列を作成しない
-
ネイティブを使用
indexOf
関数を使用することで、最速の結果を得ることができます。 -
の第2パラメータを使用して、不要な比較をスキップします。
indexOf
をスキップする - Internet Explorerで動作します。
- Regexの複雑化なし
また、ネイティブのデータ構造のプロトタイプにものを詰め込むのが嫌な人は、ここにスタンドアロン版を用意しましょう。
function endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
EDITです。
コメントで @hamish さんが指摘されているように、安全側に立って実装がすでに提供されているかどうかを確認したい場合は、単に
typeof
のようにチェックします。
if (typeof String.prototype.endsWith !== 'function') {
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
}
関連
-
Vueでルートネスティングを実装する例
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】JavaScriptのオブジェクトの長さ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
Vueの要素ツリーコントロールに破線を追加する説明
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
Vueでルートネスティングを実装する例
-
vueにおけるfilterの適用シーンについて解説します。
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方
-
[解決済み] ある文字列が他の文字列と "StartsWith" しているかどうかを確認する方法は?
-
[解決済み] 大文字・小文字を区別せず含む