JS中match方法探究

  1、match()方法简介

  match(regexp) 方法检索返回一个字符串匹配正则表达式的的结果。

  (1)参数regexp

  regexp是一个正则表达式对象,如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp 。如果它是一个有正号的正数,RegExp() 方法将忽略正号。如果你没有给出任何参数并直接使用match() 方法 ,你将会得到一 个包含空字符串的 Array :[""] 。

  (2)返回值

  • 如果未找到匹配则为null
  • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组;若未找到匹配则返回null,若找到了匹配就返回一个数组Array
  • 如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array),若未找到匹配则返回null,若找到了匹配就返回一个数组Array。 在这种情况下,返回的项目将具有如下所述的其他属性。
    • groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)
    • index: 匹配的结果的开始位置
    • input: 搜索的字符串

  2、match()方式使用

  示例代码如下:

let eformat = '1.34e-7'
let pattern = /d(?:.(d*))?e([+-]d+)/
let globalPattern = /d(?:.(d*))?e([+-]d+)/g
let array = eformat.match(pattern)
let globalArray = eformat.match(globalPattern )

  结果说明:

  (1)针对全局匹配模式(含有g标志)

  此种情况的结果很好理解,整个正则表达式全局匹配到了。

  (2)不是全局匹配的模式

  要想理解此种情况的话,就要明白正则表达式的分组概念,它是采用括号来表示分组的,在/d(?:.(d*))?e([+-]d+)/表达式中有三个分组,从左到右分别是:(?:.(d*))、(d*)、([+-]d+),但是(?:.(d*))该分组表示非获取匹配,不获取匹配结果,所以能够获取到匹配结果的分组只有(d*)、([+-]d+)。故array的结果值是分别对应分组匹配的结果值:

  • “1.34e-7”:是完整的匹配结果值
  • "34":是(d*)分组的结果值
  • "-7":是([+-]d+)分组的结果值

  若是正则表达式是这样的:/d(.(d*))?e([+-]d+)/,此时的分组从左到右分别是:(.(d*))、(d*)、([+-]d+),那么array的结果是这样的:

  • "1.34e-7":是完整的匹配结果值
  • “.34”:是(.(d*))分组的结果值
  • “34”:是(d*)分组的结果值
  • "-7":是([+-]d+)分组的结果值
原文地址:https://www.cnblogs.com/bien94/p/12766230.html