在JavaScript中,`String.prototype.match()` 方法用于检索字符串中与正则表达式相匹配的结果。如果没有找到任何匹配项,则返回 `null`。否则,它返回一个数组,其中存放了匹配的结果。如果正则表达式不包含 `g` 标志(全局搜索),返回的数组包含整个匹配项和任何括号中的捕获组。如果正则表达式包含 `g` 标志,则返回的数组包含字符串中的所有匹配项,但不包含捕获组。
### 基本用法
let str = 'For more information, visit Mozilla Developer Network or Mozilla Wiki.';
let regexp = /(mozilla)(?:\s+(?:developer\s+network|wiki))/i;
let match = str.match(regexp);
if (match !== null) {
console.log(`Found ${match[1]}!`);
// 输出: Found mozilla!
// match[0] 包含整个匹配项
// match[1] 是第一个捕获组的内容
}
### 使用全局标志 `g`
let str = 'apple banana apple cherry';
let regexp = /apple/gi;
let matches = str.match(regexp);
console.log(matches);
// 输出: ['apple', 'apple']
// 注意:没有捕获组信息,只返回匹配项
### 如果没有匹配项
let str = 'No fruit here';
let regexp = /apple/i;
let match = str.match(regexp);
if (match === null) {
console.log('No match found.');
}
// 输出: No match found.
### 注意事项
- 如果正则表达式不包含 `g` 标志,返回的数组的第一个元素存放的是匹配文本,而其余的元素是与正则表达式的子表达式匹配的文本。
- 如果正则表达式包含 `g` 标志,则返回的数组包含字符串中的所有匹配项,但不包含子匹配项或捕获的组。
- 如果没有找到任何匹配项,`match()` 方法将返回 `null`。
- 使用 `match()` 方法时,如果正则表达式是字面量形式且没有使用变量,则可以使用正则表达式字面量。如果正则表达式来自变量或计算得出,则必须使用 `RegExp` 构造函数来创建正则表达式对象。