字符串的match方法

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

语法:

  1. str.match(regexp)

参数:
一个正则表达式对象。如果传入一个非正则表达式对象,隐则会式地使用new RegExp(obj) 将其转换为一个RegExp。如果你没有 给出任何参数并直接使用匹配()方法,你将会得到一个包含空弦的Array:[“”]。
返回值:

  • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
  • 如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。在这种情况下,返回的项目将具有如下所述的其他属性

捕获组的附加属性

  • groups:一个捕获组副本或undefined(如果没有定义命名捕获组)。
  • index:匹配的结果的开始位置
  • input:搜索的字符串

    示例:

    1. let str1 = '2021/5/5 17:25:3';
    2. console.log(str1.match(/\d+/g));//=>["2021", "5", "5", "17", "25", "3"]
    3. let str1 = '2021/5/5 17:25:3';
    4. console.log(str1.match(/\d+/));//=>["2021", index: 0, input: "2021/5/5 17:25:3", groups: undefined]

    微信图片_20210506204007.png
    如果正则表达式不包含 g标志,str.match()将返回与 RegExp.exec()。相同的结果。

字符串的replace方法

replace() 方法返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern是字符串,则仅替换第一个匹配项。
原字符串不会改变。

语法:

  1. str.replace(regexp|substr, newSubStr|function)

参数:

  • regexp(pattern)一个RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。
  • substr(pattern)一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。
  • newSubStr (replacement)用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。参考下面的使用字符串作为参数
  • function (replacement)一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。参考下面的指定一个函数作为参数

变量名 代表的值

使用字符串作为参数:替换字符串可以插入下面的特殊变量名

变量名 代表的值
$$ 插入一个 “$”。
$& 插入匹配的子串。
`$`` 插入当前匹配的子串左边的内容。
$' 插入当前匹配的子串右边的内容。
$_n_ 假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。提示:索引是从1开始。如果不存在第 n个分组,那么将会把匹配到到内容替换为字面量。比如不存在第3个分组,就会用“$3”替换匹配到的内容。
_$<Name>_ 这里Name 是一个分组名称。如果在正则表达式中并不存在分组(或者没有匹配),这个变量将被处理为空字符串。只有在支持命名分组捕获的浏览器中才能使用。

指定一个函数为参数:
可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 (注意:上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用
示例:参考自定义方法

  1. return templete.replace(/\{(\d+)\}/g, (val, $1) => {
  2. //通过正则,找到字符串中所有“{数字}”类型的这一项
  3. //$n 数字代表索引,在数组中每次拿到对应的项,
  4. let item = arr[$1] || ""; //如果在数组中取不到对应值,说明没有传入,可根据实际需求,改为空字符串或者"00",
  5. if (item.length < 0) item = "0" + item; //如果当前项长度不够2,需要补个0,以对应格式:例如 5月->05月
  6. return item;
  7. });

该函数的参数:

变量名 代表的值
match 匹配的子串。(对应于上述的$&。)
p1,p2, ... 假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+p2 就是匹配的 \b+
offset 匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)
string 被匹配的原字符串。
NamedCaptureGroup 命名捕获组匹配的对象