Více na
Jak v JavaScriptu zkontrolovat, zda řetězec obsahuje podřetězec?
Obvykle bych očekával metodu String.contains()
, ale zdá se, že žádná taková neexistuje.
Jaký je rozumný způsob, jak to zkontrolovat?
7430
3
ECMAScript 6 zavedl
String.prototype.includes
:-- begin snippet: js hide: false console: true babel: false -->
includes
nemá podporu Internet Exploreru. V prostředí ECMAScript 5 nebo starším lze místo toho použítString.prototype.indexOf
, který vrací -1, když nenajde podřetězec:-- begin snippet: js hide: false console: true babel: false -->
V ES6 existuje
String.prototype.includes
:Všimněte si, že to nefunguje v Internet Exploreru a některých dalších starých prohlížečích s žádnou nebo neúplnou podporou ES6. Aby to fungovalo ve starých prohlížečích, můžete použít transpiler, jako je Babel, knihovnu shim, jako je es6-shim, nebo tuto polyfill z MDN:
Další alternativou je KMP (Knuth-Morris-Pratt).
Algoritmus KMP hledá podřetězec délkym v řetězci délkyn v nejhorším případě v čase O(n+m), zatímco nejhorší případ je O(n⋅m) pro naivní algoritmus, takže použití KMP může být rozumné, pokud vám záleží na časové složitosti v nejhorším případě.
Zde'je implementace v jazyce JavaScript od Project Nayuki, převzatá z https://www.nayuki.io/res/knuth-morris-pratt-string-matching/kmp-string-matcher.js: