彻底领悟javascript中的exec与match方法
exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:
var re=new RegExp(/\d/);
re.exec( "abc4def" ); //或者使用perl风格: /\d/.exec( "abc4def" ); //match才是字符串类提供的方法,它的参数是正则表达式对象,如下用法是正确的: "abc4def".match(\d);
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属性的时候,会返回所有匹配。
exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组(反向引用)
如下的代码将弹出"cat2,at":
var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str))
其中第一个元素是匹配的字符串"cat2",之后的元素是括号中匹配的"at"。
match函数在满足如下条件下将越俎代庖,实现和exec一样的功能:
1、正则表达式中含有分组(括号)
2、返回唯一的匹配
且看如下的代码:
var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str))
alert(str.match(p))
都将弹出消息"cat2,at",是不是觉得很奇怪呢?
总结:
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”
彻底领悟javascript中的exec与match方法的更多相关文章
- 深刻领悟javascript中的exec与match方法之异同
阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code: var someText="web2.0 .net2.0"; ...
- 正则表达式中的exec和match方法的区别
正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...
- JavaScript中String对象的match()、replace() 配合正则表达式使用
正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时, ...
- 领悟 JavaScript 中的面向对象
JavaScript是基于对象的语言,我们可以使用面向对象的思想去开发js代码. JavaScript是基于对象的语言. 可以使用面向对象的思想,但是不少人对这一点理解得并不全面. 在 JavaScr ...
- 深入了解JavaScript中的Symbol的使用方法
这篇文章主要介绍了深入了解JavaScript中的Symbol的使用方法,本文针对ES6版本的JS进行讲解,需要的朋友可以参考下 Symbol 是什么? Symbols 不是图标,也不是指在代码中可以 ...
- 总结Javascript中数组各种去重的方法
相信大家都知道网上关于Javascript中数组去重的方法很多,这篇文章给大家总结Javascript中数组各种去重的方法,相信本文对大家学习和使用Javascript具有一定的参考借鉴价值,有需要的 ...
- JavaScript中类似PHP的uniqid()方法
JavaScript中类似PHP的uniqid()方法: function generateUIDNotMoreThan1million() { return ("0000" + ...
- JavaScript中Number常用属性和方法
title: JavaScript中Number常用属性和方法 toc: false date: 2018-10-13 12:31:42 Number.MAX_VALUE--1.79769313486 ...
- Javascript正则中的exec和match
分几种情况说明 1.假设re中不是全局的也就是不带g var str = "cat3 hat4"; var re = /\w+\d/; var ex = re.exec(str); ...
随机推荐
- 消息中间件ActiveMQ使用详解
消息中间件ActiveMQ使用详解 一.消息中间件的介绍 介绍 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成. 特点(作用) ...
- 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 99 Solved: 65 Description JYY 带 ...
- Linux下解压缩 - 中文解决方案
命令行工具 Unar 以及 Lsar 安装:sudo apt-get install unar: 预览压缩包:lsar example.zip 解压缩:unar example.zip 指定位置解压: ...
- VS2015常用配置
一.调用控制台: 在VS中使用opencv或者QT过程中,完成编程后, 运行发现没有控制台窗口, 比如我们用Qt编写的界面软件, 又想看到我们在代码中添加的打印日志信息,这个时候加上控制台窗口就能实现 ...
- 【最小割】BZOJ3894-文理分科
[题目大意] 给定一个m*n的矩阵,每个格子的人可以学文或者学理,学文和学理各有一个满意度,如果以某人为中心的十字内所有人都学文或者学理还会得到一个额外满意度,求最大满意度之和. [思路] 发现这道题 ...
- 内网渗透利器--reDuh(webshell跳板)
作者:sai52[B.H.S.T] 国外大牛的作品,偶顺手写了个使用说明.E文好的看原文 http://www.sensepost.com/research/reDuh/ 这个工具可以把内网服务器的 ...
- 模拟算法+栈 HDU 1022
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- word2007-2010排版中解决段后插入分页符 新页首行空行问题
word2007-2010排版中,很多人都会遇到 这个问题.当你在 段后插入分页符 想开启新的一页的时候,新页首行有个空行.如果删除,会连同分页符一起删除.不删除有影响排版美观.那怎么解决呢: 解决办 ...
- ExtJS4.1 ExtJS TabPanel 双击标签关闭该页
/*总觉得 TabPanel 生成的那个关闭按钮太小关闭的时候不太顺手 感觉不方便 所以想双击关闭tab方便些于是在网上找到下面的代码 URL:http://atian25.iteye.com/blo ...
- NativeXml: A native Delphi XML parser and writer
http://www.simdesign.nl/xml.html This software component contains a small-footprint Object Pascal (D ...