正则里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 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

Java习惯用法总结

551
来自专栏DT乱“码”

java asm 框架 浅析

什么是asm呢?asm是assembly的缩写,是汇编的称号,对于java而言,asm就是字节码级别的编程。   而这里说到的asm是指objectweb as...

2269
来自专栏java学习

面试题3(对于类的静态变量的理解)

运行下面程序,请选择输出结果 public class x( private static int a pubilc static void main(St...

3439
来自专栏web前端教室

常用技巧之JS判断数组中某元素出现次数

现在前端开发经常需要从api中获取返回的数组, 也许是array,也许是json, 不管是什么,都需要对返回的数据进行再处理, 其中一个重要且经常用到的操作, ...

1768
来自专栏Java技术栈

Java 10 实战第 1 篇:局部变量类型推断

现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了。

854
来自专栏一个会写诗的程序员的博客

第5章 函数与函数式编程第5章 函数与函数式编程

函数式编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以传入函数参数,也可以返回一个函数。函数式编程 (简称FP) 是一种编程...

511
来自专栏架构师之旅

疯转|最近5年133个Java面试问题列表

Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越...

1955
来自专栏海天一树

小朋友学Python(3):布尔类型

本节讲解C/C++/Java/Python中的布尔类型。 一、C语言 C语言中没有布尔类型,判断时 ,0为假,非0为真。 二、C++ C++的bool是布尔类型...

26511
来自专栏鸿的学习笔记

有趣的Scala模式匹配

它被称为模式匹配,模式匹配包含了一系列以case关键字开头的分支,每一个分支包含一个模式或者是多个表达式。模式有很多种,例如常量模式('*',1),变量模式(可...

654
来自专栏java思维导图

你真的懂Java中的String、StringBuilder和StringBuffer吗?

相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String、StringBui...

1012

扫码关注云+社区