javascript exec match 区别

1999年-2022年 上市公司-企业劳动生产率数据(原始数据、代码、最终结果、参考文献) 上市公司企业劳动生产率数据集为企业和市场参与者提供了一个深入分析企业生产效率和劳动效益的工具。通过这些数据,企业可以不断探索创新的发展模式和管理方式,努力提高生产效率,为提升市场竞争力和盈利能力做出贡献。数据名称:上市公司-企业劳动生产率数据数据年份:1999-2022年数据来源:国泰安数据库1999年-2022年 上市公司-企业劳动生产率数据(原始数据、代码、最终结果、参考文献) 阅读详情

阅读本文之前,请先看下面一道题:

题目17:Read the following javascript code: 

var someText="web2.0 .net2.0";
var pattern=/(\w+)(\d)\.(\d)/g;
var outCome_exec=pattern.exec(someText);
var outCome_matc=someText.match(pattern);

What is outCome_exec[1] and outCome_matc[1]? 

Choice A: true 
Choice B: false 
Choice C: null 
Choice D: Web 
Choice E: Web2.0 
Choice F: undefined
Choice G: net2.0

这道题据说是深信服公司的一道笔试题,也是引起我写今天这篇文章的原因,不过题目我稍微修改了一下,如果这道题你答对了,你可以不往下面看了。

-----------------------------------------------------------------

  javascript中与正则表达式有关的匹配字符串的函数主要有RegExp类的方法exec(string)以及String类的方法match(regex),当然还有一些其他的方法,这里不作讨论,但是可能不少程序员都会混淆exec和match,这里列举二者的重点特性:

  1. exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:

    var re=new RegExp(/\d/);
    re.exec( "abc4def" );

    或者使用perl风格:

    /\d/.exec( "abc4def" );

    match才是字符串类提供的方法,它的参数是正则表达式对象,如下用法是正确的:

    "abc4def".match(\d);
     
  2. exec和match返回的都是数组

    如果执行exec方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。

    下面两个alert函数弹出的信息是一样的:

    var str= "cat,hat" ;
    var p=/at/; //没有g属性
    alert(p.exec(str))
    alert(str.match(p))

    都是"at"。在这种场合下exec等价于match。

    但是如果正则表达式是全局匹配(g属性)的,那么以上代码结果不一样了:

    var str= "cat,hat" ;
    var p=/at/g; //注意g属性
    alert(p.exec(str))
    alert(str.match(p))

    分别是
    "at"
    "at,at"。

    因为exec永远只返回第一个匹配,而match在正则指定了g属性的时候,会返回所有匹配。
     
  3. exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组(反向引用)

    如下的代码将弹出"cat2,at":

    var str= "cat2,hat8" ;
    var p=/c(at)\d/;
    alert(p.exec(str))

    其中第一个元素是匹配的字符串"cat2",之后的元素是括号中匹配的"at"。
     
  4. match函数在满足如下条件下将越俎代庖,实现和exec一样的功能:

    1、正则表达式中含有分组(括号)
    2、返回唯一的匹配

    且看如下的代码:

    var str= "cat2,hat8" ;
    var p=/c(at)\d/;
    alert(p.exec(str))
    alert(str.match(p))

    都将弹出消息"cat2,at",是不是觉得很奇怪呢?

以下链接提供了一些演示:http://www.webchat.com.cn/exec_match.htm

现在我们再来回顾文章开头提出的问题:

var someText= "web2.0 .net2.0" ;
var pattern=/(\w+)(\d)\.(\d)/g;
var outCome_exec=pattern.exec(someText);
var outCome_matc=someText.match(pattern);

分析:

outCome_exec的值:pattern中的g属性对exec函数是没有任何作用的,因此exec将匹配第一个可以匹配的字串“web2.0”,作为其返回数组的第一个元素,另外由于pattern中包含三个分组((\w+)、(\d)、(\d)),因此该数组还将包含三个元素,依次是“web”、“2”、“0”,所以该exec执行后的最终结果是:["web2.0","web","2","0"]

outCome_matc的值:由于pattern是全局匹配的,因此match匹配了所有可以匹配的字串,因此结果数组的值outCome_matc为["web2.0","net2.0"]。如果pattern没有g属性,那么它将与outCome_exec结果一样,因为符合本文第4小节所描述的条件:有分组且返回唯一匹配!

总结:

match是返回所有匹配的字符串合成的数组,但是正则表达式必须指定全局g属性才能返回所有匹配,不指定g属性则会返回一个只有一个元素的数组。

exec永远返回与第一个匹配相关的信息,其返回数组包括第一个匹配的字串,所有分组的反向引用。

-------------------------------------------

某些情况下exec返回的结果和match返回的结果一样:

var str= "cat,hat" ;
var p=/at/; //没有g属性
alert(p.exec(str))
alert(str.match(p))

都弹出“at”

-------------------------------------------

某些情况下match返回的结果和exec返回的结果一样:

var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str))
alert(str.match(p))

都弹出“cat2,at”


YOLOv11 改进入门篇 | 从原理到代码:CBAM 注意力模块的插入与涨点验证 本文介绍了如何在YOLOv11模型中插入CBAM注意力模块以提升检测性能。CBAM包含通道和空间注意力两个子模块,通过双池化操作和MLP学习特征权重。文章详细解析了CBAM原理,提供了PyTorch实现代码,并建议在YOLOv11的Stage-3和Stage-4之间插入CBAM。实验表明,该方法在COCO数据集上使nano和small模型的mAP提升1.7-2.3个百分点,参数量仅增加0.27%,推理延迟增加0.1ms。最后给出了插入位置选择、通道缩减比等调优建议,验证了CBAM作为轻量级注意力模块的有效性 阅读详情

相关推荐

从贝叶斯网络到结构因果模型:因果推理在可解释AI中的实践

在机器学习和数据分析领域,理解变量间的因果关系而不仅仅是统计关联,是构建可信赖、可解释系统的关键。概率图模型,特别是贝叶斯网络,通过有向无环图和条件概率表,能够高效地编码和推理变量间的条件依赖关系,广泛应用于医疗诊断、风险评估等场景。然而,贝叶斯网络主要刻画的是“是什么”的关联,难以回答“如果…会怎样”的因果问题。为了进行因果推断,需要引入结构因果模型和do-演算,它们通过定义结构方程和模拟干预操作,能够区分混杂效应,估计处理变量对结果变量的净因果影响。这一套方法论对于可解释人工智能至关重要,它能生成反事实

weixin_42168902的博客 380

JavaScript中RegExp的exec方法详解

RegExp.prototype.exec() RegExp.prototype.exec()方法在一个指定的字符串中执行模式匹配。如果匹配成功,返回数组;否则返回null。如果程序只是为了判断字符串中是否有匹配模式,请调用RegExp.prototype.test()或String.prototype.search()以提升查询效率。 var regex1 = RegExp('foo*','g'...

大菜鸟的博客 8635

windows10家庭版输入loadrunner注册码时报“License security violation. Operation isnot allowed”的解决办法

有可能出现2个错误第一个可能是第二个可能是“License security violation. Operation isnot allowed”ok,在此我在百度找了很多方法,大部分的方法都是删除注册表,但我根本就找不到这个注册表,而后又是管理中心找本地用户和组,但我依旧找不到这个玩意,然后可能是windows10家庭版本来就没有这个。再然后又以管理员身份去运行填写,好的,依旧报错,依旧未解决...

qq_30990097的博客 2560

js中正则表达式中【exec】用法深度解读

exec()是 JavaScript 正则表达式对象(RegExp)中的一个方法,用于匹配字符串中的特定模式,并返回匹配结果。它比test()和match()更强大,因为它不仅仅返回匹配成功与否,还返回匹配的具体内容及其相关信息。我们来详细讲解exec()的相关知识点。

2301_79858914的博客 4425

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

intel-VROC raid卡驱动 centos7.9

u盘进入系统,按e,在出现下面在quiet前面输入inst.dd initcall_blacklist=vmd_drv_init 后按Ctrl和x,开始引导。进入系统,按e,在出现下面在quiet前面输入inst.dd inicll_blacklist=vmd_drv_init 后按Ctrl和x,开始引导。驱动完成后,在输入 c 回车, 引导过程开始,进入安装界面。输入1 ,选择这个ISO驱动文件里的rpm包。输入1 ,选择这个ISO驱动文件里的rpm包。vi编辑 /etc/default/grub。

dacming的博客 4545

JavaScript 方法详解:`exec()`

总结起来,JavaScript中的exec方法是一个非常有用的工具,可用于在字符串中执行正则表达式搜索匹配。它提供了灵活的方式来处理文本,从而使我们能够通过简单的代码实现复杂的字符串操作。exec是RegExp对象的一个方法,用于在字符串中执行搜索匹配,并返回结果。通过循环执行exec方法,我们逐个打印出了所有匹配到的文本和它们在字符串中的起始位置。其中,regExp是一个正则表达式对象,str是要在其中执行搜索的字符串。使用exec方法可以执行有限次数的全局搜索,并每次返回一个匹配项。

前端程序猿的博客 1956

激光三角测量法:斜射与直射式技术的原理与应用解析

本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。

weixin_29280219的博客 415

正则exec

RegExp 对象的主要方法是 exec(),该方法是专门为捕获组而设计的。 exec()接受一个参数,即 要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回 null。 返回的数组虽然是 Array 的实例,但包含两个额外的属性: index 和 input。其中, index 表示匹配 项在字符串中的位置,而 input 表示应用正则表达式的字符串。在数组中,...

ddwddw4的博客 3091

从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置)

本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。

weixin_30861797的博客 271

AXI_Bus_Matrix_4x4 设计

Signal Source Width(bits) Description AWID Master AWID_WIDTH 写事务ID AWADDR Master

Starry__的博客 3770

正则表达式中test、exec、match的区别介绍及括号的用法

test() 函数是RegExp对象的方法,参数是字符串,返回值是boolean类型。exec() 函数是RegExp对象的方法,参数是正则表达式,返回值是数组。match ()函数是String对象的方法,参数是正则表达式,返回值是数组。

qq_37831545的博客 1065

数字信号处理----数字上变频和下变频都FPGA实现

** 数字信号处理基础----信号下变频和解调 一、 任务介绍 数字上变频器(DUC)和数字下变频器(DDC)广泛应用于通信系统,用于信号采样速率的转换。当信号从基带转换至中频( IF )带,需要使用数字上变频器。而数字下变频器是用于将信号从中频( IF )带转换为基带。DUC和DDC通常包括使用混频器进行频率转换,此外还有采样率转换。DUC或DDC的结构主要取决于所需要的转换率。例如,WiMAX (全球互通微波接入)系统典型的转换率为8—10阶。对于如此低的转换率,DUC和DDC只需采用FIR滤波器架构。

Born_toward的博客 3万+

js test match exec三者区别

js的正则表达式有test  exec match三种不同的方法 本博客主要参考其他博客及自己看书所得, 正则有两种表达方式,一种是字面量模式,另一种是使用RegExp的模式 test: test 返回的是Boolean ,查找对应的字符串中是否存在模式 var str="catastrop"; var reg= new RegExp("cat","g");//(使用RegExp的模式)

toumingyumaohuiyi的博客 803

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

js正则表达test exec和match的区别

js正则表达test exec和match的区别

hgffhh的博客 204

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

js match和exec的区别

一、使用方法不同 exec() 是正则对象的方法;reg.exec(str); match() 是字符串的正则表达方法; str.match(reg); 二、返回结果不同 w3cSchool 是这么说的: match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。 如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹

想飞上天和太阳肩并肩 405

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

js正则表达test、exec和match的区别

test的用法和exec一致,只不过返回值是 true false。 exec是正则表达式的方法,而不是字符串的方法 exec与全局是否定义无关系,而match则于全局相关联,当定义为非全局,两者执行结果相同 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用。 最近开发遇到一些需要使用正则表达式,顺便研究一下 正则表达式对象有两个定义...

ygunoil的博客 45

exec与match的区别,js的正则

exec是正则对象的方法,对正则表达式中的模式符g相当于不认识,它只会找到符合的字符串,同时下面详细的每一个匹配()的子匹配match是字符串对象的方法,当没有g的时候,找到第一个匹配字符串,以及下面详细的每一个匹配()的子匹配,当有g的时候,匹配多个字符串,而下面的的子匹配则丢失js中好像没有方法一次性获得所有的匹配项和匹配的子字符串,要获取这些部分,可以用以下的方法:当 exec(

809

js正则表达exec和match的区别

以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用。 最近开发遇到一些需要使用正则表达式,顺便研究一下 正则表达式对象有两个定义方式:: 1、第一种定义: new RegExp(pattern, attributes); 如var reg = new RegExp("abc","g")  其中pat

简单而思进取 6358

js中exec与match的区别

/没有g的情况下,都是找到第一个匹配,并且如果有分组,就取出分组。//exec只找第一个整体匹配,并且取得分组。//match找所有整体匹配,不找分组。

大赚万万亿 324

彻底搞懂javascript中的match, exec的区别

在工作中经常发现一些同学把这两个方法搞混,以致把自己弄的很郁闷。所以我和大家一起来探讨一下这两个方法的奥妙之处吧。 我们分以下几点来讲解: 相同点: 1.两个方法都是查找符合条件的匹配项,并以数组形式返回。2.当没有找到匹配项时,都返回null。3.当正则表达式包含子表达式且不包含全局标志g时,二者返回相同的数组。 示例: var str = 'cat10,bat20,kat...

weixin_30393907的博客 123

JS中exec函数与match函数的区别与联系

varsomeText="web2.0.net2.0";varpattern=/(\w+)(\d)\.(\d)/g;varoutCome_exec=pattern.exec(someText);varoutCome_matc=someText.match(pattern);WhatisoutCome_exec[1]andoutCome_matc[1]?ChoiceA:tru...

weixin_33989058的博客 101

JavaScript正则exec于match区别

参考题目: var someText="web2.0 .net2.0"; var pattern=/(\w+)(\d)\.(\d)/g; outCome_exec=pattern.exec(someText); outCome_matc=someText.match(pattern); 输出结果是什么?exec和match返回的都是数组 总结: match是返回所有匹...

deng131的专栏 107
上一篇: mysql命令大全(转)
下一篇: JS的正则表达式
逆乾坤
博客等级 码龄16年 30粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值