Pertanyaan Bagaimana cara memeriksa apakah string berisi substring dalam JavaScript?


Biasanya saya harapkan a String.contains() metode, tetapi tampaknya tidak ada.

Apa cara yang masuk akal untuk memeriksa ini?


7436
2017-11-24 13:05


asal


Jawaban:


Berikut ini daftar kemungkinan saat ini:

1. (ES6) includes-pergi untuk menjawab

var string = "foo",
    substring = "oo";
string.includes(substring);

2. ES5 dan lebih tua indexOf

var string = "foo",
    substring = "oo";
string.indexOf(substring) !== -1;

String.prototype.indexOf mengembalikan posisi string dalam string lain. Jika tidak ditemukan, itu akan kembali -1.

3 search-pergi untuk menjawab

var string = "foo",
    expr = /oo/;
string.search(expr);

4. termasuk lodash-pergi untuk menjawab

var string = "foo",
    substring = "oo";
_.includes(string, substring);

5. Ekspresi Reguler-pergi untuk menjawab

var string = "foo",
    expr = /oo/;  // no quotes here
expr.test(string);

6. Cocok-pergi untuk menjawab

var string = "foo",
    expr = /oo/;
string.match(expr);

Tes kinerja menunjukkan itu indexOf mungkin pilihan terbaik, jika sampai pada titik di mana kecepatan menjadi penting.


11460
2017-12-30 04:23



Anda dapat dengan mudah menambahkan contains metode ke String dengan pernyataan ini:

String.prototype.contains = function(it) { return this.indexOf(it) != -1; };

catatan: lihat komentar di bawah ini untuk argumen yang valid karena tidak menggunakan ini. Saran saya: gunakan penilaian Anda sendiri.

Kalau tidak:

if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; }

822
2017-11-24 14:17



Masalah dengan kode Anda adalah bahwa JavaScript peka huruf besar kecil. Panggilan metode Anda

indexof()

sebenarnya harus

indexOf()

Coba perbaiki dan lihat apakah itu membantu:

if (test.indexOf("title") !=-1) {
    alert(elm);
    foundLinks++;
}

427
2018-01-07 10:23



Ada sebuah string.includes di ES6:

"potato".includes("to");
> true

Perhatikan Anda mungkin perlu memuat es6-shim atau mirip dengan ini bekerja pada browser yang lebih tua.

require('es6-shim')

359
2017-11-24 13:06



var index = haystack.indexOf(needle);

340
2018-03-05 09:53



Anda bisa menggunakan JavaScript search() metode.

Sintaksnya adalah: string.search(regexp)

Ini mengembalikan posisi pertandingan, atau -1 jika tidak ada kecocokan yang ditemukan.

Lihat contoh di sana: jsref_search

Anda tidak perlu sintaks ekspresi reguler yang rumit. Jika Anda tidak akrab dengan mereka yang sederhana st.search("title") akan melakukan. Jika Anda ingin tes Anda tidak peka huruf kapital, maka Anda harus melakukannya st.search(/title/i).


237
2017-10-21 05:31



String.prototype.includes() diperkenalkan di ES6.

Menentukan apakah satu string dapat ditemukan dalam string lain,   mengembalikan benar atau salah sebagaimana mestinya.

Sintaksis

var contained = str.includes(searchString [, position]);  

Parameter

searchString

String yang harus dicari dalam string ini.

position

Posisi dalam string ini untuk mulai mencari searchString standar ke 0.

Contoh

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

console.log(str.includes("To be"));    // true
console.log(str.includes("question")); // true
console.log(str.includes("To be", 1)); // false  

Catatan

Ini mungkin membutuhkan ES6 shim di browser yang lebih lama.


167
2018-05-29 07:46



Jika Anda mencari alternatif untuk menuliskan cek jelek, Anda akan menambahkan ~ tilde sebagai gantinya.

if (~haystack.indexOf('needle')) alert('found');

Joe Zimmerman - Anda akan melihat bahwa menggunakan ~ pada -1 mengonversinya menjadi 0. Angka 0 adalah a   nilai falsey, yang berarti akan dievaluasi menjadi salah ketika dikonversi menjadi   sebuah Boolean. Itu mungkin tidak tampak seperti wawasan besar pada awalnya, tapi   ingat fungsi seperti indexOf akan mengembalikan -1 ketika query tidak   ditemukan. Ini berarti bahwa alih-alih menulis sesuatu yang mirip dengan ini:

if (someStr.indexOf("a") >= 0) {
  // Found it
} else  {
  // Not Found
}

Anda sekarang dapat memiliki lebih sedikit karakter dalam kode Anda sehingga Anda dapat menulisnya   seperti ini:

if (~someStr.indexOf("a")) {
  // Found it
} else  {
  // Not Found
}

Lebih detail di sini


120
2017-09-13 03:45



Potongan kode ini harus berfungsi dengan baik:

var str="This is testing for javascript search !!!";
if(str.search("for") != -1) {
   //logic
} 

82
2017-12-13 20:05