JS前端开发之exec()和match()的对比使用
简介
在JavaScript中,字符串对象自带了match()和exec()方法用于字符串的正则匹配。两者的区别在于返回值不同。
match()方法
match()方法是String对象的一个方法。该方法接收一个正则表达式作为参数,并返回一个匹配结果数组,如果未匹配到则返回null。如果不给该方法传递参数,结果数组中会含有一个空字符串。
示例代码:
const str = "I have 3 apples and 2 oranges.";
const result = str.match(/\d+/g);
console.log(result);
运行结果:
["3", "2"]
在上面的代码中,String对象str通过调用match()方法并传入/\d+/g正则表达式进行匹配,返回两个数字“3”和“2”。
注意,match()方法不会返回关于子组的信息,即没有关于单括号()中的内容的信息,但是在全局模式下,它会返回数组中匹配到的所有结果。
exec()方法
exec()方法是RegExp对象的一个方法。该方法接收一个字符串作为参数,并在该字符串上执行正则表达式匹配,返回匹配到的第一个结果。当RegExp设置了全局模式(g),exec()将从匹配到的子字符串后的字符开始寻找下一个匹配项。如果没有找到,则返回null。
示例代码:
const regex = /\d+/g;
const str = "I have 3 apples and 2 oranges.";
let result;
while ((result = regex.exec(str)) !== null) {
console.log(`找到 ${result[0]},从位置 ${result.index} 开始`);
}
运行结果:
找到 3,从位置 7 开始
找到 2,从位置 23 开始
在上面的代码中,RegExp对象regex执行全局匹配,当前匹配到的结果通过while循环与null做比较,直到匹配结束。每次循环输出匹配结果及其位置。
对比
虽然exec()和match()方法都是用于字符串的正则匹配,两者之间还是有一些细微的区别。
- 返回值不同
match()方法返回匹配到的结果数组,而exec()方法则返回一个匹配到的结果对象。
- 全局模式下表现不同
在全局模式下,match()方法返回所有匹配到的结果数组,而exec()方法返回第一个匹配到的结果对象,并且每次调用exec()方法时都会向下寻找下一个匹配项,直到全部匹配结束。
示例1
假设有一个字符串需要取出其中的数字,我们可以使用match()方法:
const str = "I have 3 apples and 2 oranges.";
const nums = str.match(/\d+/g);
console.log(nums); // ["3", "2"]
示例代码中把字符串中的数字通过正则表达式匹配并返回。
示例2
假如需要找出字符串中所有匹配项的起始位置和匹配内容,可以使用exec()方法:
const regex = /\d+/g;
const str = "I have 3 apples and 2 oranges.";
let result;
while ((result = regex.exec(str)) !== null) {
console.log(`找到 ${result[0]},从位置 ${result.index} 开始`);
}
示例代码中我们通过正则表达式匹配出字符串中的所有数字,输出的结果包含每个数字及其起始位置1。
总结
exec()和match()这两个方法虽然都是用于字符串的正则匹配,但是它们的使用场景不同:
- 如果只需要取出字符串中的所有匹配项,应该使用match()方法。
- 如果需要对某个字符串执行多次匹配操作,或者需要找到匹配项的位置,那么应该使用exec()方法。
注意:由于match()会返回所有匹配结果,所以它比exec()方法更占用内存。因此,在执行全局匹配并需要对匹配项逐个进行操作的时候,exec()要优于match()方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS前端开发之exec()和match()的对比使用 - Python技术站