RegExp对象的exec方法和String对象的match方法用法十分相似,分两篇博客讲讲其各自的用法和它们之间的异同。上一篇将exec方法的用法,这篇讲解match方法,并比较其异同。

定义与语法

【定义】

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

【语法】

stringObject.match(searchvalue)
stringObject.match(regexp)

【返回值】存放匹配结果的数组。

以下分3种情况讲解:

1)输入参数为普通字符串;

2)输入参数为非全局正则表达式;

3)输入参数为全部正则表达式。

输入为普通字符串

var str="web2.0 .net2.0";
var searchValue="e";
console.log(str.match(searchValue));

结果如下:

第一项:匹配到的字符串;

属性index:匹配字符串所在的位置;

属性input:输入的字符串

其实,在输入参数为普通字符串时,match方法与indexOf方法的作用类似,只是indexOf返回的是匹配字符串所在的位置,match返回的是匹配的字符串(可以通过index属性获得位置)。但如果只是要获得匹配的字符串就没有意义了,因为结果就是输入参数,所以一般match更多地用于在字符串中匹配模式。

输入为非全局RegExp对象

var str="web2.0 .net2.0";
var pattern=/(\w+)(\d)\.(\d)/;//没有全局标志g
console.log(str.match(pattern));

结果如下:

如果看过上一篇文章exec方法的用法,会发现结果与exec方法的结果完全相同。即:

第一项:web2.0,与整个模式匹配的结果,也就是与/(\w+)(\d)\.(\d)/匹配的结果;

第二项:web,与第一个匹配组匹配的结果,也就是与(\w+)匹配的结果;

第三项:2,与第二个匹配组匹配的结果,也就是与(\d)匹配的结果;

第四项:0,与第三个匹配组匹配的结果,也就是与(\d)(第二个(\d))匹配的结果;

属性一:index:0,匹配项在字符串中的位置,也就是数组第一项的匹配字符串的位置。

属性二:input:"web2.0 .net2.0",也就是输入参数str。

所以,当输入参数为非全局正则表达式时,match方法与exec方法结果一样,均为第一个匹配项的信息(包括捕获组匹配到的子字符串)。

输入为全局RegExp对象

var str="web2.0 .net2.0";
var pattern=/(\w+)(\d)\.(\d)/g;//有全局标志g
console.log(str.match(pattern));

结果如下:

可以发现,结果包含两项,分别为第一个匹配项和第二个匹配项,不包括捕获组的匹配结果,也没有index和input属性。

总结

1)match方法为String对象的方法,输入参数可以为普通字符串或RegExp对象;

2)输入为普通字符串时,结果为一个数组,包含第一个匹配到的字符串;数组有两个属性,分别为匹配字符串的位置index和输入参数input;

3)输入为非全局RegExp对象时,结果为一个数组,包含第一个匹配项的信息,格式为[与整个模式匹配的字符串,与第一个捕获组匹配的字符串,与第二个捕获组匹配的字符串,……],数组有两个属性,分别为匹配得到的字符串的位置index和输入参数字符串input;

4)输入为全局RegExp对象时,结果为一个数组,包含所有匹配的结果,但不包含捕获组匹配的子字符串、index属性和input属性。

exec()和match()异同

1)exec()为RegExp对象的方法,输入参数为字符串;match()为String对象的方法,输入参数为字符串或者RegExp对象;

2)当RegExp对象没有全局标志g时,exec()和match()方法返回结果相同,为一个包含第一个匹配项的信息的数组,格式为[与整个模式匹配的字符串,与第一个捕获组匹配的字符串,与第二个捕获组匹配的字符串,……],数组有两个属性,分别为匹配得到的字符串的位置index和输入参数字符串input;

3)当RegExp对象有全局标志g时,exec()方法每次执行时是从上次检索的终点开始检索,返回当前检索到的一个匹配项信息;match()方法执行的结果为一个包含所有匹配项的数组,不包括捕获组匹配的子字符串、index属性和input属性。

String对象的match方法的更多相关文章

  1. JavaScript中String对象的match()、replace() 配合正则表达式使用

    正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时, ...

  2. String对象的常见方法

    String 对象方法 方法 描述 anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() ...

  3. JS中string对象的一些方法

    原文地址(包含所有的string对象的方法):  http://www.dreamdu.com/javascript/object_string/ string.slice(startPos,endP ...

  4. JS基础语法---String对象下的方法(字符串的方法)

    实例方法---->必须要通过new的方式创建的对象(实例对象)来调用的方法 静态方法---->直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调用的) 字符串的常用属性: . ...

  5. java中String对象的split方法

    在java.lang包中有String.split()方法,返回是一个String[]数组,今天碰到一个自己没注意的问题: 1.特殊分隔符 String str1 = "123|456|78 ...

  6. String对象的简单方法(特别讲解length()方法的实现。

    length() 返回字符串中的字符数 charAt(index) 返回字符串中指定位置的字符 concat(s1)    将本字符串和字符串s1连接,返回一个新字符串 toUpperCase() 返 ...

  7. JS中String对象常用的方法

    1.  stringObject.charAt(index) 参数:index 必需,即字符在字符串中的下标.  返回值:   返回在指定位置的字符.返回的字符是长度为 1的字符串.(length属性 ...

  8. JavaScript RegExp对象的exec()方法

    JavaScript RegExp对象的exec()方法用来匹配字符串,它的行为与match()有些不同. 对于RegExpObject.exec(),w3school上面是这样介绍的: exec() ...

  9. RegExp对象的exec方法

    RegExp对象的exec方法和String对象的match方法用法十分相似,分两篇博客讲讲其各自的用法和它们之间的异同. 下一篇讨论match方法的用法和两者的异同. 定义及语法 [定义] exec ...

随机推荐

  1. P3698 [CQOI2017]小Q的棋盘

    题目链接 题意分析 首先 我们肯定会贪心的走从根节点到叶子结点最长的一条链 首先没有过剩的就好办了 但是有的话 我们就一边往下走 一边走分支 分支上每一个点平均走过两次 所以我们把剩下的除以\(2\) ...

  2. Objective-C Associated Objects 的实现原理

    我们知道,在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量,这似乎成为了 Objective-C 的一个明显短板.然而值得庆幸的是,我们可以通过 ...

  3. (RaspBerry Pi) Python GPIO 基本操作

    目前打算由潛入深慢慢學習RaspBerry Pi, 所以先由最容易下手的Python進入樹莓派的世界 首先要使用 GPIO 需要利用RPI.GPIO package想當然爾必須先安裝 所以先執行下列命 ...

  4. Codeforces Round #555 (Div. 3) A B C1(很水的题目)

    A. Reachable Numbers 题意:设f(x)为 x+1 这个数去掉后缀0的数,现在给出n,问经过无数次这种变换后,最多能得到多少个不同的数. 代码 #include<cstdio& ...

  5. Maven 安装jar文件到本地repository

    Reference: https://maven.apache.org/general.html#importing-jars mvn install:install-file \ -Dfile=&l ...

  6. Windows下的SASS环境搭建

    虽然眼下 CSS 预编译框架不少,但 SASS 已经逐渐成为主流了,为了更好的适应社会,满足市场需求,获取新技能是必须的. 之前一直想使用 SASS,但都碍于它需要在 ruby 环境下编译而退缩了,这 ...

  7. Java MySQL(SqlHelper)

    1.配置文件为: driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/user_info user=root passwor ...

  8. 多线程编程(四)-CyclicBarrier的使用

    CyclicBarrier的介绍 类CyclicBarrier不仅有CountDownLatch所具有的功能,还可以是啊县屏障等待的功能,也就是阶段性同步,它在使用上的意义在与可以循环地实现线程要一起 ...

  9. ThreadPoolExecutor 异常

    通过execute提交的任务,能将该任务抛出的异常交给未捕获异常处理器处理,而通过submit提交的任务,无论是抛出的未检查异常还是已检查异常,都将被认为是任务返回状态的一部分.如果一个由submit ...

  10. GB2312编码(为什么要加2020H、8080H,外码→内码→交换码→字形码)

    为什么要加上2020H和8080H? 区位码.内码.国标码怎么转换非常简单,但是令人迷惑的是为什么要那么转换?这种转换不可能平白无故地那样转换! 我搜索很多资料,找到最好的解释,总结如下: 首先,注意 ...