Yanıtlar:
ECMAScript 6 tanıtıldı String.prototype.includes
:
const string = "foo";
const substring = "oo";
console.log(string.includes(substring));
includes
Yine de Internet Explorer desteği yok . ECMAScript 5 veya daha eski ortamlarda, String.prototype.indexOf
bir alt dize bulunamadığında -1 döndüren şunu kullanın :
var string = "foo";
var substring = "oo";
console.log(string.indexOf(substring) !== -1);
string.toUpperCase().includes(substring.toUpperCase())
/regexpattern/i.test(str)
-> i bayrağı büyük / küçük harfe duyarsızlık anlamına gelir
Bir yoktur String.prototype.includes
ES6 içinde :
"potato".includes("to");
> true
Bunun Internet Explorer'da veya ES6 desteği olmayan veya eksik olan bazı eski tarayıcılarda çalışmadığını unutmayın. Eski tarayıcılarda çalışır hale getirmek için, böyle bir transpiler kullanmak isteyebilir Babel gibi bir dolgu kütüphaneye ES6-şim veya bu MDN Polyfill :
if (!String.prototype.includes) {
String.prototype.includes = function(search, start) {
'use strict';
if (typeof start !== 'number') {
start = 0;
}
if (start + search.length > this.length) {
return false;
} else {
return this.indexOf(search, start) !== -1;
}
};
}
"potato".includes("to");
ve Babil'den geç.
"boot".includes("T")
olduğunufalse
Başka bir alternatif KMP'dir (Knuth – Morris – Pratt).
KMP algoritması , saf algoritma için en kötü O ( n ⋅ m ) ile karşılaştırıldığında, en kötü O ( n + m ) süresinde bir uzunluk n dizesinde uzunluk- m bir alt dizeyi arar , bu nedenle KMP kullanımı En kötü zaman karmaşıklığını önemsiyorsanız makul olun.
İşte Project Nayuki tarafından https://www.nayuki.io/res/knuth-morris-pratt-string-matching/kmp-string-matcher.js adresinden alınan bir JavaScript uygulaması :
// Searches for the given pattern string in the given text string using the Knuth-Morris-Pratt string matching algorithm.
// If the pattern is found, this returns the index of the start of the earliest match in 'text'. Otherwise -1 is returned.
function kmpSearch(pattern, text) {
if (pattern.length == 0)
return 0; // Immediate match
// Compute longest suffix-prefix table
var lsp = [0]; // Base case
for (var i = 1; i < pattern.length; i++) {
var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP
while (j > 0 && pattern.charAt(i) != pattern.charAt(j))
j = lsp[j - 1];
if (pattern.charAt(i) == pattern.charAt(j))
j++;
lsp.push(j);
}
// Walk through text string
var j = 0; // Number of chars matched in pattern
for (var i = 0; i < text.length; i++) {
while (j > 0 && text.charAt(i) != pattern.charAt(j))
j = lsp[j - 1]; // Fall back in the pattern
if (text.charAt(i) == pattern.charAt(j)) {
j++; // Next char matched, increment position
if (j == pattern.length)
return i - (j - 1);
}
}
return -1; // Not found
}
console.log(kmpSearch('ays', 'haystack') != -1) // true
console.log(kmpSearch('asdf', 'haystack') != -1) // false
indexOf()
...