How to check whether a string contains a substring in JavaScript?

ID : 23

viewed : 266

Tags : javascriptstringsubstringstring-matchingjavascript

Top 5 Answer for How to check whether a string contains a substring in JavaScript?

vote vote

94

ECMAScript 6 introduced String.prototype.includes:

const string = "foo"; const substring = "oo";  console.log(string.includes(substring)); // true

includes doesn’t have Internet Explorer support, though. In ECMAScript 5 or older environments, use String.prototype.indexOf, which returns -1 when a substring cannot be found:

var string = "foo"; var substring = "oo";  console.log(string.indexOf(substring) !== -1); // true

vote vote

87

There is a String.prototype.includes in ES6:

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

Note that this does not work in Internet Explorer or some other old browsers with no or incomplete ES6 support. To make it work in old browsers, you may wish to use a transpiler like Babel, a shim library like es6-shim, or this polyfill from MDN:

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;     }   }; } 
vote vote

73

Another alternative is KMP (Knuth–Morris–Pratt).

The KMP algorithm searches for a length-m substring in a length-n string in worst-case O(n+m) time, compared to a worst-case of O(nm) for the naive algorithm, so using KMP may be reasonable if you care about worst-case time complexity.

Here's a JavaScript implementation by Project Nayuki, taken from https://www.nayuki.io/res/knuth-morris-pratt-string-matching/kmp-string-matcher.js:

// 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

vote vote

59

Simple Way to remove untracked files

To remove all untracked files, The simple way is to add all of them first and reset the repo as below

git add --all git reset --hard HEAD 

Top 3 video Explaining How to check whether a string contains a substring in JavaScript?

Related QUESTION?