String.prototype.search()

Summary: in this tutorial, you’ll learn how to use the JavaScript String search() function to search for a match of a string with a regular expression and return the first match.

Introduction to the JavaScript String search() function

The search() method matches a string with a regular expression and returns the index of the first match in the string:

let index = str.search(regexp);Code language: JavaScript (javascript)

In this syntax, the regexp is a regular expression object.

If you pass a value that is not a RegExp object to the method, it will convert that value to a RegExp object using the following expression:

RegExp(regexp)Code language: JavaScript (javascript)

If the search() doesn’t find any match, it returns -1.

JavaScript String Search

Besides a regular expression object, you can pass any object that has Symbol.search() method to the search() method.

JavaScript String search() method examples

Let’s take some examples of using the JavaScript search() function.

Basic JavaScript string search() method usages

The following example uses the search() method to return the first occurrence of a capital letter in a string:

let re = /[A-Z]/;
let str = 'hi There! How are you?';
let index = str.search(re);

console.log(index);Code language: JavaScript (javascript)

Output:

3Code language: JavaScript (javascript)

It returns 3 which is the index of the capital letter T.

The following example returns -1 because there is no number in the string:

let re = /[0-9]/;
let str = 'Hello, JavaScript!';
let index = str.search(re);

console.log(index);Code language: JavaScript (javascript)

Output:

-1Code language: JavaScript (javascript)

Passing an object with the Symbol.search method

The following example illustrates how to use the search() method with an object that has the Symbol.search method:

class EmailDomainChecker {
  constructor(domain) {
    this.domain = domain;
  }

  [Symbol.search](email) {
    if (!email.includes("@")) {
      return -1;
    }
    const [, domain] = email.split("@");
    return domain === this.domain ? 1 : -1;
  }
}

const js = new EmailDomainChecker("javascripttutorial.net");

let isJsEmail = "[email protected]".search(js) === 1;
console.log({ isJsEmail });

isJsEmail = "[email protected]".search(js) === 1;
console.log({ isJsEmail });Code language: JavaScript (javascript)

Output:

{ isJsEmail: true }
{ isJsEmail: false }Code language: JavaScript (javascript)

How it works.

First, define a class EmailDomainChecker with a Symbol.search method that returns 1 if the email has a domain that matches with a specified domain, or -1 otherwise.

class EmailDomainChecker {
  constructor(domain) {
    this.domain = domain;
  }

  [Symbol.search](email) {
    if (!email.includes("@")) {
      return -1;
    }
    const [, domain] = email.split("@");
    return domain === this.domain ? 1 : -1;
  }
}Code language: JavaScript (javascript)

Second, create a new EmailDomainChecker object with the gmail.com domain:

const js = new EmailDomainChecker("javascripttutorial.net");Code language: JavaScript (javascript)

Third, check if the email [email protected] comes from the javascripttutorial.net domain using the search() method:

let isJsEmail = "[email protected]".search(js) === 1;
console.log({ isJsEmail });Code language: JavaScript (javascript)

The search() method will invoke the Symbol.search method of the js object that returns 1 in this case.

Finally, check if the [email protected] email belongs to the domain name javascripttutorial.net:

isJsEmail = "[email protected]".search(js) === 1;
console.log({ isJsEmail });Code language: JavaScript (javascript)

It returns -1 in this case.

Summary

  • Use the JavaScript String search() to find the index of the first match based on a regular expression in a string.
Was this tutorial helpful ?