Pertanyaan Bagaimana cara memeriksa apakah string “StartsWith” string lain?


Bagaimana saya akan menulis setara dengan C # String.StartsWith di JavaScript?

var haystack = 'hello world';
var needle = 'he';

//haystack.startsWith(needle) == true

Catatan: Ini adalah pertanyaan lama, dan seperti yang ditunjukkan dalam komentar ECMAScript 2015 (ES6) memperkenalkan .startsWith metode. Namun, pada saat penulisan pembaruan ini (2015) Dukungan browser masih jauh dari selesai.


1547
2018-03-14 20:12


asal


Jawaban:


Anda dapat menggunakan ECMAScript 6 ini String.prototype.startsWith() metode, tapi itu belum didukung di semua browser. Anda akan ingin menggunakan shim / polyfill untuk menambahkannya di browser yang tidak mendukungnya. Menciptakan implementasi yang sesuai semua detail ditata dalam spek sedikit rumit, dan versi yang didefinisikan dalam jawaban ini tidak akan melakukannya; jika Anda menginginkan shim yang setia, gunakan salah satu:

Setelah Anda mengurangi metodenya (atau jika Anda hanya mendukung browser dan mesin JavaScript yang sudah memilikinya), Anda dapat menggunakannya seperti ini:

"Hello World!".startsWith("He"); // true

var haystack = "Hello world";
var prefix = 'orl';
haystack.startsWith(prefix); // false

1655
2018-03-14 20:19



Alternatif lain dengan .lastIndexOf:

haystack.lastIndexOf(needle, 0) === 0

Ini terlihat mundur haystack untuk terjadinya needle mulai dari indeks 0 dari haystack. Dengan kata lain, itu hanya memeriksa jika haystack dimulai dengan needle.

Pada prinsipnya, ini harus memiliki keunggulan kinerja atas beberapa pendekatan lain:

  • Itu tidak mencari keseluruhan haystack.
  • Itu tidak membuat string sementara yang baru dan kemudian segera membuangnya.

1226
2018-01-02 16:14



data.substring(0, input.length) === input

569
2018-03-14 20:14



Tanpa fungsi pembantu, hanya menggunakan regex .test metode:

/^He/.test('Hello world')

Untuk melakukan ini dengan string dinamis daripada yang hardcoded (dengan asumsi bahwa string tidak akan berisi karakter kontrol regexp):

new RegExp('^' + needle).test(haystack)

Anda harus memeriksanya Apakah ada fungsi RegExp.escape di Javascript? jika ada kemungkinan bahwa karakter kontrol regexp muncul dalam string.


180
2018-01-04 00:59



Saya hanya ingin menambahkan pendapat saya tentang ini.

Saya pikir kita bisa menggunakan seperti ini:

var haystack = 'hello world';
var needle = 'he';

if (haystack.indexOf(needle) == 0) {
  // Code if string starts with this substring
}

50
2018-02-12 14:47



Solusi terbaik:

function startsWith(str, word) {
    return str.lastIndexOf(word, 0) === 0;
}

startsWith("aaa", "a")
true
startsWith("aaa", "ab")
false
startsWith("abc", "abc")
true
startsWith("abc", "c")
false
startsWith("abc", "a")
true
startsWith("abc", "ba")
false
startsWith("abc", "ab")
true

Dan ini dia berakhir dengan jika Anda membutuhkannya juga:

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

Bagi mereka yang lebih memilih untuk prototipe menjadi String: 

String.prototype.startsWith || (String.prototype.startsWith = function(word) {
    return this.lastIndexOf(word, 0) === 0;
});

String.prototype.endsWith   || (String.prototype.endsWith = function(word) {
    return this.indexOf(word, this.length - word.length) !== -1;
});

Pemakaian: 

"abc".startsWith("ab")
true
"c".ensdWith("c") 
true

42
2018-04-26 21:56



Berikut adalah sedikit peningkatan pada solusi CMS:

if(!String.prototype.startsWith){
    String.prototype.startsWith = function (str) {
        return !this.indexOf(str);
    }
}

"Hello World!".startsWith("He"); // true

 var data = "Hello world";
 var input = 'He';
 data.startsWith(input); // true

Memeriksa apakah fungsi sudah ada jika browser masa depan mengimplementasikannya dalam kode asli atau jika diimplementasikan oleh pustaka lain. Sebagai contoh, Prototype Library mengimplementasikan fungsi ini.

Menggunakan ! sedikit lebih cepat dan lebih ringkas daripada === 0 meskipun tidak bisa dibaca.


37
2018-05-27 02:54