正则里exec跟match的区别

还在傻傻分不清这两个函数该用哪个?来来来,本文给你一个清晰的思路~!

一、 exec match分别是谁家的方法

exec是RegExp类的方法 match是String类的方法

分清楚是各是哪里的方法之后,就知道怎么使用了

栗子:

/hello/.exec('hello world');

'hello world'.match(/'hello'/);

二、 区别

简单来说,跟g有关系 exec 只会匹配第一个符合的字符串(意味着g对其不起作用),跟所有分组的反向引用 match 是否返回所有匹配的数组跟正则表达式里是否带着g有关系

const str = 'd3aish hello world d5aisy';
const reg = /\dai/;
//  先看没有g的情况

console.log(str.match(reg)); 
console.log(reg.exec(str));

// 这时候就会返回同一个数组['3ai'],原因是第一个match跟g有关,这里没有全局匹配,所以只有
// 一个,而下面这个本来就只返回第一个匹配的字符串跟它的分组引用,这里没有分组引用,所以
// 也只返回了一个匹配的字段

接下来看看有g的情况下

const str = 'd3aish hello world d5aisy';
const reg = /\dai/g;

console.log(str.match(reg)); 
console.log(reg.exec(str));

//这时候第一个就会返回['3ai','5ai'],而第二个就会返回跟上面一样的['3ai'],结果符合预期

那什么情况下match的结果会跟exec一样呢,对正则的要求是

不带g呗~

还是举个栗子
const str = 'version2.1 version2.0';
const reg = /(\w+)(\d)\.(\d)/;

console.log(str.match(reg)); 
console.log(reg.exec(str));

这段代码两个函数都返回["version2.1","version","2","1"]

总的来说,exec跟match的区别有两点,首先是不同类的方法, 其次是否跟g有关。

参考文档:http://www.cnblogs.com/xiehuiqi220/archive/2008/12/01/1327487.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mathor

JAVA——流程控制语句

1255
来自专栏技术博文

PHP声明变量

变量是指在程序的运行过程中随时可以发生变化的量,在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性等。变量的值是临时的,当程...

27111
来自专栏还债之路

每日一题--统计字符串出现的次数

使用awk统计出来指定字符串中重复出现的字符并重复出现了几次,现在只考虑有数字和字母,先区分大小写 eg: aaabbc------> a 重复出现3次,b重复...

954
来自专栏Java帮帮-微信公众号-技术文章全总结

JAVA面试题解惑——final、finally和finalize的区别

final、finally和finalize的区别是什么? 这是一道再经典不过的面试题了,我们在各个公司的面试题中几乎都能看到它的身影。final、final...

3396
来自专栏程序员互动联盟

【编程基础】C语言指针的初始化和赋值

1、指针的初始化 指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。...

3588
来自专栏大闲人柴毛毛

稳扎稳打JavaScript(一)——作用域链内存模型

几个概念 在开始之前,先了解几个概念。 1.1. 作用域 作用域是指当前正在执行的代码能够访问到变量的范围; 每个函数都有各自的作用域,存储函数所有的局部变量...

4188
来自专栏老司机的技术博客

人人都能学会的python编程教程12:函数的参数

Python的函数定义非常简单,也非常灵活。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还...

4717
来自专栏calmound

Javascript字符串

## 定义 ``` var str = new String("abcdefg"); var str = "abcdefg"; ``` ## 常用方法 ###...

2836
来自专栏Coding迪斯尼

自制Monkey语言编译器:解释执行if..else判断语句

905
来自专栏用户2442861的专栏

Java finally语句到底是在return之前还是之后执行?

网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正...

1052

扫码关注云+社区