跳到主要内容

JavaScript 字符串 match() 方法

match() 方法返回将字符串与正则表达式匹配的结果。

示例

const message = "JavaScript是一种有趣的编程语言。";

// 检查消息中是否包含 '编程' 的正则表达式
const exp = /编程/;

// 检查 exp 是否存在于 message 中
let result = message.match(exp);
console.log(result);

/*
输出:[
'编程',
索引:20,
输入:'JavaScript是一种有趣的编程语言。',
组:undefined
]
*/

match() 语法

match() 方法的语法为:

str.match(regexp);

这里,str 是一个字符串。

match() 参数

match() 方法接受:

  • regexp - 一个正则表达式对象(如果参数是非 RegExp 对象,则隐式转换为 RegExp

注意: 如果你不提供任何参数,match() 返回 [""]

match() 返回值

  • 返回一个包含匹配项的 数组,每个匹配项一个元素。
  • 如果没有找到匹配项,则返回 null

示例 1:使用 match()

const string = "我正在学习 JavaScript 不是 Java。";
const re = /Java/;

let result = string.match(re);
console.log("匹配 /Java/ 的结果:");
console.log(result);

const re1 = /Java/g;
let result1 = string.match(re1);

console.log("带有 g 标志的 /Java/ 匹配结果:");
console.log(result1);

输出

匹配 /Java/ 的结果:
[
'Java',
索引:14,
输入:'我正在学习 JavaScript 不是 Java。',
组:undefined
]
带有 g 标志的 /Java/ 匹配结果:
[ 'Java', 'Java' ]

在这里,我们可以看到,不使用 g 标志,我们只得到第一个匹配的结果,但包含详细信息,如索引、输入和组。

注意:如果正则表达式不包含 g 标志,str.match() 将只返回第一个匹配项,类似于 RegExp.exec()。返回的项还将具有以下额外属性:

  • groups - 一个具有键名和键值的命名捕获组对象。
  • index - 搜索中找到结果的索引。
  • input - 搜索字符串的副本。

示例 2:匹配字符串中的部分

const string = "我的名字是 Albert。你的名字是 Soyuj。";

// 表达式匹配不区分大小写的 "名字是"+ 任意字母直到句号 (.)
const re = /名字是\s[a-zA-Z]+\./gi;

let result = string.match(re);
console.log(result); // [ '名字是 Albert。', '名字是 Soyuj。' ]

// 使用命名捕获组
const re1 = /名字是\s(?<name>[a-zA-Z]+)\./i;
let found = string.match(re1);

console.log(found.groups); // {name: "Albert"}

输出

[ '名字是 Albert。', '名字是 Soyuj。' ]
{name: "Albert"}

在这里,我们使用了正则表达式来匹配字符串的某个部分。我们还可以使用上面所示的语法来捕获匹配中的某些组。

推荐阅读: JavaScript String matchAll()