原文: How to Check if a String Contains a Substring in JavaScript

在编写 JavaScript 程序时,你可能需要检查一个字符串是否包含一个子字符串。子字符串是另一个字符串中的字符串。

具体来说,你可能需要检查一个单词是否包含特定字符或特定字符集。

值得庆幸的是,在 JavaScript 中有一些快速的方法可以实现这一点。

在本文中,你将学习使用 JavaScript 检查字符串是否包含子字符串的两种不同方法。

具体来说,你将学习:

  • 如何使用内置的 includes()JavaScript 方法
  • 如何使用内置的 indexOf()JavaScript 方法

下面是我们将详细介绍的内容:

  • JavaScript 中 includes() 方法的语法分解
  • 如何使用 includes() 方法检查一个字符串是否包含一个特定的子串
  • JavaScript 中 indexOf() 方法的语法分解
  • 如何使用 indexOf() 方法来检查一个字符串是否包含一个特定的子串
  • 如何使用 includes()indexOf() 方法进行不区分大小写的检查

JavaScript 中的 includes() 方法语法详解

JavaScript 的 includes() 方法是在 ES6 中引入的,它是检查一个字符串是否包含一个特定字符或一系列字符的最常见和最现代的方法。

includes() 方法的一般语法是这样的:

string.includes(substring, index);

让我们把它分解一下:

  • string 是你想搜索的词
  • includes() 是你在你想搜索的单词上调用的方法,在本例中是 string
  • includes() 方法接受两个参数——一个是必需的,一个是可选的
  • substring 是你要检查的字符或字符系列,看它们是否存在于字符串中
  • index 指的是搜索 substring 的起始位置——默认值是 0,因为编程语言的索引是从 0 开始的。

返回值是一个布尔值。布尔值可以是 true 或者 false,取决于子串在字符串中是否存在。

需要记住的是,includes() 方法是区分大小写的。

如何在 JavaScript 中使用 includes() 方法检查一个字符串是否包含一个特定的子串

让我们来看一个例子,说明 includes() 方法是如何工作的。

首先,我创建了一个具有 Hello, World 字符串的变量——这是我想要搜索的字符串:

let string= "Hello, World";

接下来,我创建了一个带有 Hello 子串的变量——这是我想在原始字符串中搜索的子串:

let string= "Hello, World";
let substring = "Hello";

接下来,我将使用 includes() 方法检查 string 中是否存在 substring,并将结果打印到控制台:

let string= "Hello, World";
let substring = "Hello";

console.log(string.includes(substring));

// output
// true

返回值为 true,意味着 Hello 存在于变量 string 中。

如上节所述,includes() 方法是区分大小写的。

看看当我把 substring 的值从 Hello 改为 hello 时会发生什么:

let string= "Hello, World";
let substring = "hello";

console.log(string.includes(substring));

// output
// false

在这种情况下,返回值为 false,因为没有包含小写字母 h 的子串 hello。所以,在使用 includes() 方法时,请记住这一点——它区分了大写和小写字母。

现在,让我们看看如何使用具有第二个参数 indexincludes() 方法。

作为提醒,第二个参数指定了你要开始搜索子串的位置。

让我们使用前面例子中的同一个 string 变量:

let string= "Hello, World";

我将把 substring 变量的值改为 H

let string= "Hello, World";
let substring = "H";

我将指定子串的搜索从 0 位置开始:

let string= "Hello, World";
let substring = "H";

console.log(string.includes(substring,0));

// output
// true

返回值为 true,因为子字符串 H 位于字符串 Hello, World 中的索引位置 0

记住,字符串中的第一个字母的位置为 0,第二个字母的位置为 1,依此类推。

JavaScript 中的 indexOf() 方法语法分解

includes() 方法类似,JavaScript 的 indexOf() 方法检查字符串是否包含子字符串。

indexOf() 方法的一般语法是这样的:

string.indexOf(substring, index);

让我们分解一下:

  • string 是你想要搜索的单词
  • Index0f() 是对要搜索的单词(在本例中是 string)调用的方法
  • includes() 方法接受两个参数——一个是必需的,另一个是可选的
  • indexOf() 方法的第一个参数是 substring,它是必需的,substring 是要搜索的字符或字符集
  • indexOf() 方法的第二个参数是 index,它是可选的,index 指搜索 substring 开始的位置,默认值是 0,因为编程语言中的索引从 0 开始

这两个方法的区别在于它们的返回值。

includes() 方法返回一个布尔值(一个要么为 true 要么为 false 的值),而 indexOf() 方法返回一个数字。

这个数字将是你要寻找的子串在字符串中的起始索引位置。如果在字符串中没有找到该子串,则返回值为 -1

就像 includes() 方法一样,indexOf() 方法也是区分大小写的。

如何在 JavaScript 中使用 indexOf() 方法检查一个字符串是否包含一个特定的子串

让我们使用前面的例子来看看 indexOf() 方法是如何工作的。

let string= "Hello, World";
let substring = "H";

有一个变量 string 为原始字符串,还有一个变量 substring 为你要搜索的子字符串。

let string= "Hello, World";
let substring = "H";

console.log(string.indexOf(substring));

// output
// 0

输出结果是 0,这是你要搜索的子串的起始位置。

在这个例子中,你要搜索的值是一个单字符。

让我们把子串的值从 H 改为 Hello

let string= "Hello, World";
let substring = "Hello";

console.log(string.indexOf(substring));

// output
// 0

返回值又是 0,因为 index0f() 返回你要寻找的子串的起始位置。由于子串的第一个字符位于 0 的位置,所以 indexOf() 返回 0

现在,让我们把子串的值从 Hello 改为小写的 h

let string= "Hello, World";
let substring = "hello";

console.log(string.indexOf(substring));

// output
// -1

其返回值为 -1。如前所述,index0f() 是区分大小写的,所以它不能找到有小写字母 h 的子串 hello,而当 indexOf() 不能找到给定的子串时,它会返回 -1

最后,你可以通过传递 indexOf() 接受的第二个参数来指定你想从哪个索引值开始搜索。

let string= "Hello, World";
let substring = "hello";

console.log(string.indexOf(substring,1));

// output
// -1

假设你想从位置 1 开始搜索。返回值是 -1,因为你要搜索的子串的起始位置是 0。在位置 1 没有找到完全匹配的子串,所以 indexOf() 返回 -1

如何使用 includes() 和 indexOf()方法进行不区分大小写的检查

到目前为止,你已经看到 includes()indexOf() 方法是不分大小写的。

但是当你想进行不区分大小写的检查时,会发生什么呢?

为了进行不区分大小写的检查,并查看一个字符串中是否存在一个子串,你需要在调用这两个方法中的一个之前,使用 JavaScript 的 toLowerCase() 方法将原始字符串和子串都转换成小写。

下面是你如何使用 includes() 方法来完成这个工作。

let string= "Hello, World";
let substring = "hello";

console.log(string.toLowerCase().includes(substring.toLowerCase()));

// output
// true

默认情况下,返回值为 false,因为原始字符串包含一个大写的 H,而子串包含一个小写的 h。在将两个字符串转换为小写之后,你就不必担心原始字符串和你要搜索的子串的大写问题了。

下面是你如何使用 indexOf() 方法做同样的事情:

let string= "Hello, World";
let substring = "hello";

console.log(string.toLowerCase().indexOf(substring.toLowerCase()));

// output
// 0

默认情况下,返回值应该是 -1,因为原始的字符串和你要搜索的子串的大小写不同。

使用 toLowerCase() 方法后,indexOf() 方法返回子串的起始位置。

总结

就是这些啦,你现在知道了如何在 JavaScript 中检查一个字符串是否包含一个子串。

要学习更多关于 JavaScript 的知识,请查看 freeCodeCamp 的 JavaScript 算法和数据结构认证

这是一个免费的、经过深思熟虑的、结构化的课程,你将通过交互式课程来学习,然后你还将构建 5 个项目来申请认证并巩固知识。

谢谢你阅读本文!