字符串的match方法
match()
方法检索返回一个字符串匹配正则表达式的结果
语法:
str.match(regexp)
参数:
一个正则表达式对象。如果传入一个非正则表达式对象,隐则会式地使用new RegExp(obj)
将其转换为一个RegExp
。如果你没有 给出任何参数并直接使用匹配()方法,你将会得到一个包含空弦的Array
:[“”]。
返回值:
- 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
- 如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(
Array
)。在这种情况下,返回的项目将具有如下所述的其他属性
捕获组的附加属性
groups
:一个捕获组副本或undefined
(如果没有定义命名捕获组)。index
:匹配的结果的开始位置input
:搜索的字符串示例:
let str1 = '2021/5/5 17:25:3';
console.log(str1.match(/\d+/g));//=>["2021", "5", "5", "17", "25", "3"]
let str1 = '2021/5/5 17:25:3';
console.log(str1.match(/\d+/));//=>["2021", index: 0, input: "2021/5/5 17:25:3", groups: undefined]
如果正则表达式不包含g
标志,str.match()
将返回与RegExp.exec()
。相同的结果。
字符串的replace方法
replace()
方法返回一个由替换值(replacement
)替换部分或所有的模式(pattern
)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern
是字符串,则仅替换第一个匹配项。
原字符串不会改变。
语法:
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 是一个分组名称。如果在正则表达式中并不存在分组(或者没有匹配),这个变量将被处理为空字符串。只有在支持命名分组捕获的浏览器中才能使用。 |
指定一个函数为参数:
可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 (注意:上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用
示例:参考自定义方法
return templete.replace(/\{(\d+)\}/g, (val, $1) => {
//通过正则,找到字符串中所有“{数字}”类型的这一项
//$n 数字代表索引,在数组中每次拿到对应的项,
let item = arr[$1] || ""; //如果在数组中取不到对应值,说明没有传入,可根据实际需求,改为空字符串或者"00",
if (item.length < 0) item = "0" + item; //如果当前项长度不够2,需要补个0,以对应格式:例如 5月->05月
return item;
});
该函数的参数:
变量名 | 代表的值 |
---|---|
match |
匹配的子串。(对应于上述的$&。) |
p1,p2, ... |
假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+ ,p2 就是匹配的 \b+ 。 |
offset |
匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd' ,匹配到的子字符串是 'bc' ,那么这个参数将会是 1) |
string |
被匹配的原字符串。 |
NamedCaptureGroup | 命名捕获组匹配的对象 |