1. ホーム
  2. javascript

[解決済み] JavaScriptにおけるendsWith

2022-03-19 12:53:45

質問

JavaScriptで、ある文字列が特定の文字で終わっているかどうかを調べるにはどうしたらいいですか?

例 ある文字列

var str = "mystring#";

その文字列の末尾が # . どうすれば確認できますか?

  1. はあるのでしょうか? endsWith() というメソッドをJavaScriptで作成することはできますか?

  2. 私が持っている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;
    };
}