正则表达式match,exec,replace的区别

本文详细介绍了正则表达式中 ., ( ), [], {} 的不同用法,以及 match, exec 和 replace 方法的区别。match 方法在非全局和全局匹配模式下的行为,exec 方法如何在全局匹配中处理 lastIndex 属性,以及 replace 方法在替换文本时$美元符号的特殊意义。" 121898972,11664633,Spring Cloud Gateway深入解析:路由规则与断言过滤器,"['后端开发', 'Java', '微服务', 'Spring Cloud', 'API网关']
摘要由CSDN通过智能技术生成

2/52

  • 学到的知识

void 0 === undifined:为了防止被重构

Math.round(A) = a+.5|0

正则表达式总结


.() [] {} 的区别

参考:https://www.cnblogs.com/richiewlq/p/7307581.html#_label0

  1. ():组,用来提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串

  2. []:定义匹配的范围

比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符和数字。[\s表示空格或者号]

  1. {}: 表示匹配的长度

比如\s{3}表示匹配三个空格


match exec replace 的区别

字符串的正则方法有:match()、replace()、search()、split()

正则对象的方法有:exec()、test()

  • replace:
  • 普通的文本替换
var str="I love antzone and you?";
var reg=/an/g;
console.log(str.replace(reg,"java"));
  • 当第二参数为函数的时候

replacement可以是具有特殊意义的美元$符号:

$美元符号功能罗列如下:

.$1、$2、…、$99:分别对应正则表达式第一个到第九九个子表达式匹配的内容。

replace()函数的第一个参数是正则表达式,并且执行的是全局匹配,那么第二个函数参数会多次被调用,每次被调用传递的参数,也是和regexp_global.exec(url)返回的数组的元素内容是相同的。


  • match:
    match的用法主要区分就是,正则表达式是否有全局标示g.
    一.非全局匹配:

所谓非全局匹配,也就是使用g修饰符,具体参阅正则表达式 g 修饰符一章节。

此时,match方法最多只在字符串中成功匹配一次:

(1).如果不存在匹配的子字符串,返回null。

(2).如果存在匹配的子字符串,返回一个数组。

返回的数组解析如下:

首先说明一下,数组元素的索引是从0开始的。

(1).第0个元素是匹配结果。

(2).第1个元素是第一个引用型分组匹配的子字符串,引用分组可以参阅正则表达式引用型分组一章节。

(3).第2个元素存放的是第二个引用型分组匹配的子字符串,依次类推。

返回的数组对象同时具有两个属性:

(1).index:返回匹配的子字符串起始字符在stringObject源字符串中的位置。

(2).input:返回stringObject源字符串。

二.全局匹配:

match方法执行全局匹配,获取所有可以匹配的子字符串:

(1).如果不存在匹配的子字符串,返回null。

(2).如果存在匹配的子字符串,返回一个数组。

与非全局匹配的区别:

(1).不具有index和input属性。

(2).不具有引用型分组匹配的子字符串,数组元素仅包含匹配的所有子字符串。

var str="本站url地址是www.softwhy.com"; 
var reg1=/why/;
console.log(str.match(reg1));
>>> ["why", index: 16, input: "本站url地址是www.softwhy.com", groups: undefined]
 
var str="本站url地址是www.softwhy.com"; 
var reg2=/why/g;
console.log(str.match(reg2));
>>> ["why"]


var str="本站url地址是www.softwhy.com"; 
var reg3=/w(h)y/;
console.log(str.match(reg3));
>>> ["why", "h", index: 16, input: "本站url地址是www.softwhy.com", groups: undefined]
数组第一个元素是正则表达式中引用分组所匹配的内容。


var str="本站url地址是www.softwhy.com"; 
var reg4=/w(h)y/g;
console.log(str.match(reg4));
>>> ["why"]

  • exec
    它是正则的实例方法
    一.非全局匹配:

非全局匹配模式,此方法的返回值与match方法完全一样。

完成一次匹配即可,然后将结果存入数组,如果匹配失败,方法返回null。

代码实例如下:

let str="antzone"; 
let reg=/n/;
console.log(reg.exec(str));

>>> ["n", index: 1, input: "antzone", groups: undefined]

代码分析如下:

(1).正则表达式采用非全局匹配。

(2).成功完成一次匹配,并返回一个数组。

(3).数组第一个元素是正则表达式匹配内容。

(4).index属性返回匹配内容的在原字符串的起始位置。

(5).input属性返回str原字符串。



let str="antzone"; 
let reg=/(n)(t)/;
console.log(reg.exec(str));
>>>  ["nt", "n", "t", index: 1, input: "antzone", groups: undefined]
(1).数组第一个元素是正则表达式匹配内容。

(2).数组第二个元素是第一个子表达式匹配到的内容,第三个元素是第二个子表达式匹配到的内容,以此类推。

(3).index属性返回匹配内容的在原字符串的起始位置。

(4).input属性返回str原字符串。


二.全局匹配:

全局匹配模式下,此方法返回值依然是一个数组。

与全局匹配模式下的match方法不同的是,exec方法依然只在字符串中匹配一次。

当正则表达式具有全局标记g时,仍然时返回一个匹配及分组匹配的子串,当再次调用exec()时,它会从lastIndex属性所指示的字符处开始检索,即exec()自带遍历功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值