JavaScript 字符串 search() 方法

JavaScript search() 语法

search() 是 JavaScript 字符串的一个方法,它用于查找字符串中是否存在符合条件的子串。如果存在,则返回第一个匹配项的索引;如果不存在,则返回 -1。

换个角度来看,我们只需要判断 search() 方法返回值是否为 -1,就可以判断字符串中是否包含指定子串了。

语法:

str.search(pattern)

说明:

search() 方法接收单个参数。

  • pattern(必选):是一个正则表达式。如果 pattern 是一个非正则表达式对象(如字符串),它会隐式地使用 new RegExp(pattern) 将其转换为正则表达式。

提示:

  • search() 方法会严格区分大小写。如果需要忽略大小写,可以在正则表达式中使用 i 标志(例如 /apple/i)。
  • 如果想要查找所有匹配项,我们可以使用 matchAll() 方法。

JavaScript search() 摘要

属于 JavaScript 查找字符串
使用频率
修改原字符串
官方文档 查看
MDN 查看

JavaScript search() 示例

接下来,我们通过几个简单的例子来讲解一下 JavaScript search() 方法是如何使用的。

示例 1:search() 参数是一个字符串

const str = "My favorite fruits are apple, banana and pear";
const result = str.search("apple");

console.log(result);

运行结果如下。

23

分析:

如果 search() 参数是一个非正则表达式对象(如字符串),它会隐式地使用 new RegExp(pattern) 将其转换为正则表达式。对于这个例子来说,str.search("apple") 等价于 str.search(/apple/)。

在实际开发中,我们可以通过判断 search() 方法返回值是否为 -1,然后来判断字符串中是否包含指定子串。

示例 2:search() 参数是一个正则表达式

const str = "My number is 020-666666 or 022-888888";
const result = str.search(/\d{3}-\d{6}/);

console.log(result);

运行结果如下。

13

分析:

虽然 str 存在两个匹配项,也就是 “020-666666” 和 “022-888888”,但 search() 方法只会返回第一个匹配项的索引。

search() 方法的定位其实非常明确,它就是用于判断字符串是否存在匹配项(通过返回值是否为 -1 来判断),而不是要找出该匹配项是什么。如果想要找出所有匹配项,我们应该使用的是 match() 或 matchAll()。

示例 3:match() 找出所有匹配项

const reg = /\d{3}-\d{6}/g;
const str = "My number is 020-666666 or 020-888888";
const result = str.match(reg);

console.log(result);

运行结果如下。

['020-666666', '020-888888']

分析:

match() 方法返回的是一个数组,在实际开发中我们有时只需要拿到第一个匹配的值,此时只需要使用下标 “[0]” 就可以了,也就是 result[0]。

search()、indexOf()、includes() 的区别

search()、indexOf()includes() 这 3 个方法都可以用于判断字符串是否包含指定子串,它们之间的区别如下:

  • search():会返回第一个匹配正则表达式的子串的开始下标。如果未找到,则返回 -1。只支持正则表达式作为参数。如果传入字符串,它会先将其转换为正则表达式。此外,search() 无法获取所有匹配项的索引,也无法获取匹配到的实际子串信息(除了索引)。
  • indexOf():会返回指定子串在字符串中第一次出现的索引。如果未找到,则返回 -1。indexOf() 只支持字符串作为参数(不接受正则表达式)。我们可以通过判断返回值是否为 -1 来判断是否包含子串。
  • includes():会返回一个布尔值 (true 或 false),表示字符串是否包含指定子串。但 includes() 无法获取子串的索引位置。

在实际开发中,至于选择哪个方法,取决于我们的具体需求:

  • 如果需要使用正则表达式进行模式匹配并获取第一个匹配位置,应该考虑使用 search()。
  • 如果需要知道子串第一次出现的位置,应该考虑使用 indexOf()。
  • 如果只需要判断字符串是否包含某个子串,includes() 是最简洁明了的选择。

上一篇: lastIndexOf()

下一篇: match()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号