JS前端开发之exec()和match()的对比使用

JS前端开发之exec()和match()的对比使用

简介

在JavaScript中,字符串对象自带了match()和exec()方法用于字符串的正则匹配。两者的区别在于返回值不同。

match()方法

match()方法是String对象的一个方法。该方法接收一个正则表达式作为参数,并返回一个匹配结果数组,如果未匹配到则返回null。如果不给该方法传递参数,结果数组中会含有一个空字符串。

示例代码:

const str = "I have 3 apples and 2 oranges.";
const result = str.match(/\d+/g);
console.log(result);

运行结果:

["3", "2"]

在上面的代码中,String对象str通过调用match()方法并传入/\d+/g正则表达式进行匹配,返回两个数字“3”和“2”。

注意,match()方法不会返回关于子组的信息,即没有关于单括号()中的内容的信息,但是在全局模式下,它会返回数组中匹配到的所有结果。

exec()方法

exec()方法是RegExp对象的一个方法。该方法接收一个字符串作为参数,并在该字符串上执行正则表达式匹配,返回匹配到的第一个结果。当RegExp设置了全局模式(g),exec()将从匹配到的子字符串后的字符开始寻找下一个匹配项。如果没有找到,则返回null。

示例代码:

const regex = /\d+/g;
const str = "I have 3 apples and 2 oranges.";
let result;

while ((result = regex.exec(str)) !== null) {
  console.log(`找到 ${result[0]},从位置 ${result.index} 开始`);
}

运行结果:

找到 3,从位置 7 开始
找到 2,从位置 23 开始

在上面的代码中,RegExp对象regex执行全局匹配,当前匹配到的结果通过while循环与null做比较,直到匹配结束。每次循环输出匹配结果及其位置。

对比

虽然exec()和match()方法都是用于字符串的正则匹配,两者之间还是有一些细微的区别。

  1. 返回值不同

match()方法返回匹配到的结果数组,而exec()方法则返回一个匹配到的结果对象。

  1. 全局模式下表现不同

在全局模式下,match()方法返回所有匹配到的结果数组,而exec()方法返回第一个匹配到的结果对象,并且每次调用exec()方法时都会向下寻找下一个匹配项,直到全部匹配结束。

示例1

假设有一个字符串需要取出其中的数字,我们可以使用match()方法:

const str = "I have 3 apples and 2 oranges.";
const nums = str.match(/\d+/g);
console.log(nums); // ["3", "2"]

示例代码中把字符串中的数字通过正则表达式匹配并返回。

示例2

假如需要找出字符串中所有匹配项的起始位置和匹配内容,可以使用exec()方法:

const regex = /\d+/g;
const str = "I have 3 apples and 2 oranges.";
let result;
while ((result = regex.exec(str)) !== null) {
  console.log(`找到 ${result[0]},从位置 ${result.index} 开始`);
}

示例代码中我们通过正则表达式匹配出字符串中的所有数字,输出的结果包含每个数字及其起始位置1。

总结

exec()和match()这两个方法虽然都是用于字符串的正则匹配,但是它们的使用场景不同:

  • 如果只需要取出字符串中的所有匹配项,应该使用match()方法。
  • 如果需要对某个字符串执行多次匹配操作,或者需要找到匹配项的位置,那么应该使用exec()方法。

注意:由于match()会返回所有匹配结果,所以它比exec()方法更占用内存。因此,在执行全局匹配并需要对匹配项逐个进行操作的时候,exec()要优于match()方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS前端开发之exec()和match()的对比使用 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript中函数分类&this指向的实例详解

    Javascript中函数分类&this指向的实例详解 函数的分类 Javascript中的函数可大致分为以下几类: 1. 全局函数 全局函数是位于全局作用域下的函数,可以被任何地方调用到,其定义方式如下: function funcName() { // 函数体 } 2. 对象方法 对象方法是位于对象中的函数,其可以访问对象中的属性或方法,其定义方…

    JavaScript 2023年5月27日
    00
  • JavaScript创建数组的方法详解

    JavaScript创建数组的方法详解 在JavaScript中创建数组的方法有很多,本文将详细讲解其中的6种方法。 1. 直接量 使用直接量的方式可以快速创建一个数组,只需要使用方括号[],并在其中用逗号隔开各元素。示例如下: let arr1 = [1, 2, 3]; 2. 使用new Array() 使用new Array()的方式也可以创建一个数组,…

    JavaScript 2023年5月27日
    00
  • js判断登陆用户名及密码是否为空的简单实例

    下面我将为您详细讲解“js判断登陆用户名及密码是否为空的简单实例”的完整攻略。 前置知识 在实现本例中,需要您掌握以下基础知识: HTML基础语法 JavaScript基础语法 表单基本操作 实现步骤 1. 创建表单 首先,我们需要在HTML代码中创建一个表单,用于用户输入用户名和密码: <form id="login-form"&…

    JavaScript 2023年6月10日
    00
  • Vue Element前端应用开发之动态菜单和路由的关联处理

    Vue Element前端应用开发之动态菜单和路由的关联处理攻略 在Vue Element前端应用中,动态菜单和路由的关联处理能够提供更好的用户体验。本文将详细讲解如何实现这一功能。 动态菜单 菜单是Vue Element应用的核心组成部分之一,它为用户提供了简洁的导航方式,并且提高了应用的可用性。对于动态菜单而言,它能够实现菜单的自动化生成以及可配置化,这…

    JavaScript 2023年6月11日
    00
  • JS实现json对象数组按对象属性排序操作示例

    讲解“JS实现json对象数组按对象属性排序操作示例”的完整攻略,大致分为以下步骤: 1.准备JSON对象数组数据首先,我们需要准备一组JSON对象数组数据。例如,假设我们要对一个用户列表进行排序,我们可以定义一个包含多个用户信息的数组,每个用户信息都是一个JSON对象。示例代码如下: var users = [ { name: "张三"…

    JavaScript 2023年5月27日
    00
  • 浅谈Javascript中的Label语句

    当开发者在JavaScript的开发中需要使用到跳出多重循环或者是跳出函数的操作时,使用break和continue关键字 这两个关键字的作用都是控制循环语句,break直接跳出循环,continue只是跳出本次循环,但是仅仅使用这两个关键字是满足不了开发者的需求,这个时候我们就需要了解 label 语句。 Label语句的含义 在 JavaScript 中…

    JavaScript 2023年5月28日
    00
  • JS散列表碰撞处理、开链法、HashTable散列示例

    JS散列表碰撞处理是指在散列表中插入元素时,如果发现插入位置已经有元素,就会出现碰撞的情况。碰撞处理的目标是保持散列表中没有重复的元素。下面将介绍两种JS散列表的碰撞处理方法:开链法和线性探测法。 开链法 开链法也被称为拉链法,是一种常用的碰撞处理技术。它的基本思想是将每个散列值的链表放置在散列表的对应位置上,如果插入时与该链表中的某个元素发生碰撞,就将新元…

    JavaScript 2023年5月28日
    00
  • JS面向对象的程序设计相关知识小结

    下面是“JS面向对象的程序设计相关知识小结”的详细讲解。 1. Javascript面向对象基础 1.1 对象 在Javascript中,对象是由属性和方法组成的实例。属性可以是一个值、一个函数或一个对象。一个对象的属性也可以是另一个对象。方法是指对象可以执行的函数。 对象的创建可以使用字面量语法、构造函数或Object.create()方法。例如: // …

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部