📜  JavaScript | exec() 方法(1)

📅  最后修改于: 2023-12-03 15:01:39.218000             🧑  作者: Mango

JavaScript | exec() 方法

简介

exec() 是 JavaScript 中用于匹配正则表达式并返回结果的方法。该方法是 RegExp 对象的一个方法,用于在字符串中搜索匹配的内容。

语法
regexObj.exec(str)
  • regexObj:一个正则表达式对象。
  • str:要搜索的字符串。
返回值

exec() 方法返回一个数组,其中包含第一个匹配项的信息。如果没有找到匹配项,则返回 null

返回的数组包含两个属性:

  1. 0 索引:表示匹配到的完整文本。
  2. index 索引:表示匹配到的文本在原字符串中的索引位置。

在数组上还可以添加任意数量的属性来存储其他信息。

示例
const str = "Hello, world! Welcome to JavaScript!";
const regex = /world/g;

const result = regex.exec(str);
console.log(result); // ['world', index: 7, input: 'Hello, world! Welcome to JavaScript!', groups: undefined]
多次匹配

如果正则表达式设置了 g 标志,exec() 方法将从匹配到的位置继续搜索,并返回下一个匹配项。

const str = "Hello, JavaScript! Hello, world! Hello, everyone!";
const regex = /Hello/g;

let result;
while ((result = regex.exec(str)) !== null) {
  console.log(result[0]); // 'Hello', 'Hello', 'Hello'
  console.log(result.index); // 0, 14, 27
}
可使用捕获组

正则表达式中使用了括号 ( ) 来表示捕获组,exec() 方法返回的数组将包含每个捕获组的匹配项。

const str = "John Doe, jane.doe@example.com";
const regex = /([A-Za-z]+) ([A-Za-z]+), ([A-Za-z.]+@[A-Za-z]+\.[A-Za-z]+)/;

const result = regex.exec(str);
console.log(result);
// ['John Doe, jane.doe@example.com', 'John', 'Doe', 'jane.doe@example.com']
console.log(result[1]); // 'John'
console.log(result[2]); // 'Doe'
console.log(result[3]); // 'jane.doe@example.com'
注意事项
  • exec() 方法是正则表达式的状态方法,将会改变正则表达式对象的 lastIndex 属性,所以在多次调用 exec() 方法时要小心使用。
  • 如果正则表达式没有设置 g 标志,则 exec() 方法每次调用都将从字符串的开头搜索匹配项。
  • 如果正则表达式是全局的,且有捕获组,则每次调用 exec() 方法都会更新正则表达式的 lastIndex 属性,以便下一次搜索能够继续从正确的位置开始。
参考资料
总结

exec() 方法是 JavaScript 中用于匹配正则表达式的方法之一。它可用于搜索字符串中的匹配项,并返回相关信息的数组。在多次调用时,exec() 方法可以一次获取所有匹配项,并且可以使用捕获组进一步处理匹配的内容。但需要注意,exec() 方法会改变正则表达式对象的状态,因此在使用时要留意相关的注意事项。