JavaScript 字符串 match() 方法

JavaScript match() 语法

match() 是 JavaScript 字符串的一个方法,它使用正则表达式来查找字符串中是否存在符合条件的子串。如果存在,则以 “数组” 形式返回第一个匹配项的相关信息;如果不存在,则返回空数组。

语法:

str.match(pattern)

说明:

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

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

对于 match() 方法的返回值,小伙伴们要清楚以下几点。

  • 如果 pattern 不包含全局标志 “g” ,则 match() 返回一个数组,该数组包含第一个匹配项及其相关信息(如匹配的子字符串、捕获组、索引、原字符串等)。如果未找到匹配项,则返回 null。
  • 如果 pattern 包含全局标志 “g” ,则 match() 返回一个数组,该数组包含所有匹配子字符串。如果未找到匹配项,则返回 null
  • 如果 pattern 是一个空字符串或一个空正则表达式 /^$/,并且字符串非空,则返回空字符串。

注意:

  • match() 方法会严格区分大小写,除非正则表达式中使用了 “i” 标志。
  • 如果你想要获取所有匹配项的完整迭代器,可以使用 matchAll() 方法。

JavaScript match() 摘要

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

JavaScript match() 示例

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

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

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

console.log(result);

运行结果如下。

[
  'apple',
  index: 23,
  input: 'My favorite fruits are apple, banana and pear',
  groups: undefined
]

分析:

当参数是一个字符串时,match() 会将其转换为一个正则表达式对象(不带 “g” 标志)。对于这个例子来说,str.match("apple") 等价于 str.match(/apple/)。

match() 会以数组的方式来返回匹配项的相关信息,包括匹配子串、索引、原字符串等。

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

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

console.log(result);

运行结果如下。

[
  '020-666666',
  index: 13,
  input: 'My number is 020-666666 or 020-888888',
  groups: undefined
]

分析:

虽然 str 存在两个匹配项,也就是 “020-666666” 和 “020-888888”,但 match() 方法只会返回第一个匹配项的相关信息。如果你想要拿到所有的匹配项,可以使用以下两种方式。

  • match() 结合 “g” 标志。
  • 使用 matchAll() 方法。

示例 3:match() 结合 “g” 标志

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

console.log(result);

运行结果如下。

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

分析:

当正则表达式使用 “g” 标志时,match() 会返回一个数组,该数组包含所有的匹配项。

示例 4:使用 matchAll() 方法

const str = "My number is 020-666666 or 020-888888";

// 注意:matchAll 的正则必须包含 "g" 标志
const result = str.matchAll(/\d{3}-\d{6}/g);

for (let item of result) {
    console.log(item);
}

运行结果如下。

[
  '020-666666',
  index: 13,
  input: 'My number is 020-666666 or 020-888888',
  groups: undefined
]
[
  '020-888888',
  index: 27,
  input: 'My number is 020-666666 or 020-888888',
  groups: undefined
]

分析:

matchAll() 方法返回一个可迭代对象(Iterator),然后我们可以使用 for of 语句来遍历出每一项。

match() 与 matchAll() 的区别

match() 和 matchAll() 这两个方法都可以用于查找字符串中所有符合条件的子串,它们之间的区别如下。

  • 默认情况下,match() 只会返回第一个匹配项,而 matchAll() 会返回所有匹配项。
  • match() 返回的是一个数组,而 matchAll() 返回的是一个可迭代对象(Iterator)。

上一篇: search()

下一篇: matchAll()

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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