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日

相关文章

  • js循环中使用正则失效异常的踩坑实战

    下面是“js循环中使用正则失效异常的踩坑实战”的完整攻略: 问题描述 在 JavaScript 代码中使用循环处理多个字符串时,我们可能会使用正则表达式进行匹配和替换。但是,在某些情况下,我们在循环中使用正则表达式时,可能会遇到正则表达式失效的异常,即我们无法正确地匹配到字符串的值。这种情况下,我们需要注意一些问题,以保证代码正常运行。 原因分析 引起正则表…

    JavaScript 2023年6月10日
    00
  • JS比较2个日期间隔的示例代码

    对于比较两个日期的间隔,我们可以使用JavaScript中的Date对象和一些简单的运算来实现。以下是实现方式的攻略: 一、 创建两个日期对象 首先我们需要创建两个Date对象来表示要比较的两个日期。可以通过Date的构造函数,传递包含日期和时间的字符串作为参数来创建一个日期对象。 var date1 = new Date(‘2021-01-01’); va…

    JavaScript 2023年5月27日
    00
  • 一文讲清JS中for循环的所有用法

    一文讲清JS中for循环的所有用法 在JavaScript中,for循环是一种常见的控制流语句,它可以帮助我们快速地对一个集合中的元素进行遍历。本文将介绍JavaScript中for循环的各种用法。 for循环的基本语法 for循环的基本语法如下: for (initialization; condition; increment) { statement;…

    JavaScript 2023年6月10日
    00
  • token 机制和实现方式

    Token机制是一种通过在用户请求中加入令牌(token)来验证用户身份的方式。相比于传统的基于cookie或session的身份验证方式,Token机制能够避免跨站请求伪造(CSRF)和跨站脚本攻击(XSS)等安全问题。 以下是Token机制的实现方式: 用户登录时,需要向服务器发送登录请求(例如通过POST方式提交用户名和密码)。服务器根据用户输入的用户…

    JavaScript 2023年6月11日
    00
  • json数据的列循环示例

    下面是关于json数据的列循环示例的完整攻略,包含两条示例说明。 JSON数据的列循环示例 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于一个子集的JavaScript编程语言,易于读取和编写。 JSON格式是失效的,意味着基于所有现代编程语言的解析器都可以读取和解析JSON数据格式。…

    JavaScript 2023年5月27日
    00
  • JS中Array数组学习总结

    以下是关于“JS中Array数组学习总结”的完整攻略: JS中Array数组学习总结 概念 数组是一种有序的数据集合,是JavaScript中最重要的数据类型之一。数组可以通过索引访问、插入和删除其中的元素。 声明数组 数组的声明方式有两种,分别是字面量方式和构造函数方式。 // 字面量方式 let arr1 = [1, 2, 3, 4, 5]; // 构造…

    JavaScript 2023年5月27日
    00
  • JavaScript高级程序设计 XML、Ajax 学习笔记

    JavaScript高级程序设计 XML、Ajax 学习笔记 简介 本学习笔记主要介绍了JavaScript高级程序设计中XML和Ajax的相关内容,通过学习本笔记,读者将掌握XML的基本语法和解析以及Ajax的异步通信和请求,从而实现Web应用程序的高效交互。 XML 基本语法 XML是一种自定义标记语言,它允许我们定义自己的标记来描述某个对象的属性。下面…

    JavaScript 2023年5月27日
    00
  • 比较简单的异步加载JS文件的代码

    异步加载JS文件的代码可以通过以下步骤实现: 创建一个script标签,并设置async属性为true。这将告诉浏览器立即下载JS文件,但不会阻塞页面的渲染。 示例代码: <script async src="path/to/your/js/file.js"></script> 创建一个JavaScript函数,该…

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