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)。
