程序员手把手拆解:match、matchAll、g标志全揭秘
2023-10-25 05:26:44
match:在字符串中查找第一个匹配项
match() 方法在字符串中查找与正则表达式相匹配的第一个子串。如果找到匹配项,则返回一个包含匹配子串信息的 Match 对象。如果未找到匹配项,则返回 null。
matchAll:在字符串中查找所有匹配项
matchAll() 方法在字符串中查找与正则表达式相匹配的所有子串。如果找到匹配项,则返回一个包含所有匹配子串信息的 Iterator 对象。如果未找到匹配项,则返回一个空 Iterator 对象。
g标志:全局匹配
g 标志是一个可选标志,用于指示正则表达式进行全局匹配。当指定 g 标志时,正则表达式会逐个匹配字符串中的所有子串,直到找到最后一个匹配项。如果没有指定 g 标志,则正则表达式只会匹配字符串中的第一个匹配项。
match加g标志:匹配所有子串
当 match() 方法与 g 标志一起使用时,它将返回一个包含字符串中所有匹配子串信息的 Match 对象数组。如果字符串中没有匹配项,则返回一个空数组。
match不加g标志:只匹配第一个子串
当 match() 方法不加 g 标志使用时,它只会返回一个包含字符串中第一个匹配子串信息的 Match 对象。如果字符串中没有匹配项,则返回 null。
matchAll加g标志:返回所有匹配项的 Iterator 对象
当 matchAll() 方法与 g 标志一起使用时,它将返回一个包含字符串中所有匹配子串信息的 Iterator 对象。可以使用这个 Iterator 对象来遍历所有匹配项。
matchAll不加g标志:返回一个空 Iterator 对象
当 matchAll() 方法不加 g 标志使用时,它将返回一个空 Iterator 对象。
使用示例
以下示例演示了 match() 方法和 matchAll() 方法在不同情况下返回的结果:
const str = 'JavaScript is a programming language.';
// 使用 match() 方法查找第一个匹配项
const matchResult1 = str.match(/Java/g);
console.log(matchResult1); // ["Java"]
// 使用 match() 方法查找第一个匹配项,不使用 g 标志
const matchResult2 = str.match(/Java/);
console.log(matchResult2); // ["Java"]
// 使用 matchAll() 方法查找所有匹配项
const matchAllResult1 = str.matchAll(/Java/g);
console.log(matchAllResult1); // Iterator 对象
// 使用 matchAll() 方法查找所有匹配项,不使用 g 标志
const matchAllResult2 = str.matchAll(/Java/);
console.log(matchAllResult2); // 空 Iterator 对象
输出结果:
["Java"]
["Java"]
Iterator {Symbol(Symbol.asyncIterator): ƒ}
空 Iterator 对象
从输出结果可以看出,match() 方法和 matchAll() 方法在不同情况下返回的结果是不同的。match() 方法只返回第一个匹配项,而 matchAll() 方法返回所有匹配项。当使用 g 标志时,match() 方法和 matchAll() 方法都会返回所有匹配项。
总结
match() 方法用于在字符串中查找与正则表达式相匹配的第一个子串。matchAll() 方法用于在字符串中查找与正则表达式相匹配的所有子串。g 标志用于指示正则表达式进行全局匹配。当指定 g 标志时,正则表达式会逐个匹配字符串中的所有子串,直到找到最后一个匹配项。如果没有指定 g 标志,则正则表达式只会匹配字符串中的第一个匹配项。