Viac na
Ako skontrolovať, či reťazec obsahuje podreťazec v jazyku JavaScript?
Zvyčajne by som očakával metódu String.contains()
, ale zdá sa, že žiadna neexistuje.
Aký je rozumný spôsob, ako to skontrolovať?
7430
3
ECMAScript 6 zaviedol
String.prototype.includes
:includes
nemá podporu Internet Explorer. V prostredí ECMAScript 5 alebo staršom sa namiesto toho môže použiťString.prototype.indexOf
, ktorý vráti -1, keď nenájde podreťazec:V ES6 existuje
String.prototype.includes
:Všimnite si, že toto nefunguje v Internet Exploreri alebo niektorých iných starých prehliadačoch bez podpory ES6 alebo s neúplnou podporou ES6. Ak chcete, aby to fungovalo v starých prehliadačoch, môžete použiť transpiler, ako je Babel, knižnicu shim, ako je es6-shim, alebo túto polyfill z MDN:
Ďalšou alternatívou je KMP (Knuth-Morris-Pratt).
Algoritmus KMP hľadá podreťazec dĺžkym v reťazci dĺžkyn v najhoršom prípade v čase O(n+m) v porovnaní s najhorším prípadom O(n⋅m) pre naivný algoritmus, takže použitie KMP môže byť rozumné, ak vám záleží na časovej zložitosti v najhoršom prípade.
Tu'je implementácia v jazyku JavaScript od Project Nayuki, prevzatá z https://www.nayuki.io/res/knuth-morris-pratt-string-matching/kmp-string-matcher.js: