zoukankan      html  css  js  c++  java
  • 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+)分组的结果值
  • 相关阅读:
    ajax理论
    模块
    node.js(1)
    ES6
    data对象
    数组
    对象
    webdriver对应的驱动版本
    TrineaAndroidCommon API Guide
    PV,UV,IP概念
  • 原文地址:https://www.cnblogs.com/bien94/p/12766230.html
Copyright © 2011-2022 走看看