Pertanyaan diakhiriDalam JavaScript


Bagaimana saya bisa memeriksa apakah string berakhir dengan karakter tertentu dalam JavaScript?

Contoh: Saya memiliki sebuah string

var str = "mystring#";

Saya ingin tahu apakah string itu berakhir dengan #. Bagaimana saya bisa memeriksanya?

  1. Apakah ada endsWith() metode di JavaScript?

  2. Salah satu solusi yang saya miliki adalah mengambil panjang string dan mendapatkan karakter terakhir dan memeriksanya.

Apakah ini cara terbaik atau ada cara lain?


1014
2017-11-11 11:15


asal


Jawaban:


UPDATE (24 November 2015):

Jawaban ini awalnya diposting pada tahun 2010 (ENAM tahun lalu.) Jadi harap perhatikan komentar yang berwawasan ini:


JAWABAN ASLI:

Saya tahu ini adalah pertanyaan lama tahun ... tapi saya butuh ini juga dan saya memerlukannya untuk bekerja lintas-browser jadi ... menggabungkan jawaban dan komentar semua orang dan menyederhanakannya sedikit:

String.prototype.endsWith = function(suffix) {
    return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
  • Tidak membuat substring
  • Menggunakan bawaan indexOf berfungsi untuk hasil tercepat
  • Lewati perbandingan yang tidak perlu menggunakan parameter kedua indexOf untuk melompat ke depan
  • Berfungsi di Internet Explorer
  • Tidak ada komplikasi Regex

Juga, jika Anda tidak suka menjejali benda-benda dalam prototipe struktur data asli, inilah versi yang berdiri sendiri:

function endsWith(str, suffix) {
    return str.indexOf(suffix, str.length - suffix.length) !== -1;
}

EDIT: Sebagaimana dicatat oleh @hamish dalam komentar, jika Anda ingin melakukan kesalahan di sisi yang aman dan memeriksa apakah implementasi telah disediakan, Anda bisa menambahkan typeof periksa seperti ini:

if (typeof String.prototype.endsWith !== 'function') {
    String.prototype.endsWith = function(suffix) {
        return this.indexOf(suffix, this.length - suffix.length) !== -1;
    };
}

1703
2018-03-30 19:40



/#$/.test(str)

akan berfungsi di semua browser, tidak memerlukan penambalan monyet String, dan tidak perlu memindai seluruh string sebagai lastIndexOf tidak ketika tidak ada kecocokan.

Jika Anda ingin mencocokkan string konstan yang mungkin berisi karakter khusus ekspresi reguler, seperti '$', maka Anda dapat menggunakan yang berikut:

function makeSuffixRegExp(suffix, caseInsensitive) {
  return new RegExp(
      String(suffix).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$",
      caseInsensitive ? "i" : "");
}

lalu Anda bisa menggunakannya seperti ini

makeSuffixRegExp("a[complicated]*suffix*").test(str)

285
2018-03-24 20:32



  1. Sayangnya tidak.
  2. if( "mystring#".substr(-1) === "#" ) {}

82
2017-11-11 11:20



Ayolah, ini benar endsWith pelaksanaan:

String.prototype.endsWith = function (s) {
  return this.length >= s.length && this.substr(this.length - s.length) == s;
}

menggunakan lastIndexOf hanya menciptakan loop CPU yang tidak perlu jika tidak ada kecocokan.


66
2017-09-27 08:34



Versi ini menghindari pembuatan substring, dan tidak menggunakan ekspresi reguler (beberapa jawaban regex di sini akan berfungsi; yang lain rusak):

String.prototype.endsWith = function(str)
{
    var lastIndex = this.lastIndexOf(str);
    return (lastIndex !== -1) && (lastIndex + str.length === this.length);
}

Jika kinerja penting bagi Anda, akan sangat bermanfaat untuk menguji lastIndexOf sebenarnya lebih cepat daripada membuat substring atau tidak. (Mungkin tergantung pada mesin JS yang Anda gunakan ...) Ini mungkin lebih cepat dalam kasus yang cocok, dan ketika string kecil - tetapi ketika string sangat besar perlu melihat kembali seluruh hal bahkan meskipun kami tidak terlalu peduli :(

Untuk memeriksa satu karakter, temukan panjangnya dan kemudian gunakan charAt mungkin adalah cara terbaik.


55
2017-11-11 11:58



Tidak melihat apporach dengan slice metode. Jadi saya tinggalkan saja di sini:

function endsWith(str, suffix) {
    return str.slice(-suffix.length) === suffix
}

23
2018-06-09 07:17



return this.lastIndexOf(str) + str.length == this.length;

tidak berfungsi dalam kasus di mana panjang string asli kurang dari panjang string pencarian dan string pencarian tidak ditemukan:

lastIndexOf mengembalikan -1, kemudian Anda menambahkan string pencarian panjang dan Anda akan tersisa dengan panjang string asli.

Kemungkinan perbaikan adalah

return this.length >= str.length && this.lastIndexOf(str) + str.length == this.length

17
2018-03-04 15:58



Dari developer.mozilla.org String.prototype.endsWith ()

Ringkasan

Itu endsWith() metode menentukan apakah string berakhir dengan karakter string lain, mengembalikan true atau false sebagaimana mestinya.

Sintaksis

str.endsWith(searchString [, position]);

Parameter

  • searchString : Karakter yang dicari di akhir string ini.

  • posisi : Cari dalam string ini seolah-olah string ini hanya selama ini; default ke panjang aktual string ini, dijepit dalam rentang yang ditetapkan oleh panjang string ini.

Deskripsi

Metode ini memungkinkan Anda menentukan apakah string berakhir dengan string lain atau tidak.

Contoh

var str = "To be, or not to be, that is the question.";

alert( str.endsWith("question.") );  // true
alert( str.endsWith("to be") );      // false
alert( str.endsWith("to be", 19) );  // true

Spesifikasi

Spesifikasi Bahasa ECMAScript Edisi 6 (ECMA-262)

Kompatibilitas browser

Browser compatibility


13
2018-03-05 14:57



String.prototype.endsWith = function(str) 
{return (this.match(str+"$")==str)}

String.prototype.startsWith = function(str) 
{return (this.match("^"+str)==str)}

saya harap ini membantu

var myStr = “  Earth is a beautiful planet  ”;
var myStr2 = myStr.trim();  
//==“Earth is a beautiful planet”;

if (myStr2.startsWith(“Earth”)) // returns TRUE

if (myStr2.endsWith(“planet”)) // returns TRUE

if (myStr.startsWith(“Earth”)) 
// returns FALSE due to the leading spaces…

if (myStr.endsWith(“planet”)) 
// returns FALSE due to trailing spaces…

cara tradisional

function strStartsWith(str, prefix) {
    return str.indexOf(prefix) === 0;
}

function strEndsWith(str, suffix) {
    return str.match(suffix+"$")==suffix;
}

8
2017-10-17 10:55



if( ("mystring#").substr(-1,1) == '#' )

-- Atau --

if( ("mystring#").match(/#$/) )

7
2017-11-11 11:26



Saya tidak tahu tentang Anda, tetapi:

var s = "mystring#";
s.length >= 1 && s[s.length - 1] == '#'; // will do the thing!

Mengapa kalimat biasa? Mengapa mengacaukan prototipe? substr? Ayo...


6
2018-05-02 08:01