JS正则表达式梳理

1. 创建正则

(1)字面量 / /
(2)构造函数(使用场景:匹配变量)
let reg = new RegExp("\\d");    //这种方法匹配时需要加引号,并且需要添加\进行转译

2. 正则方法

(1)test 查看正则表达式与指定的字符串是否匹配。返回 truefalse
let str = 'wew3e34rwerwrr1234';
let reg = /\d+/;
console.log(reg.test(str)); //输出bool
(2)exec 在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null
let str = 'wew3e34rwerwrr1234';
let reg = /\d+/g;
console.log(reg.exec(str)); //输出数组,找到内容,跟match相近

在这里插入图片描述

注意:如果全局匹配,exec()只匹配一次,如果想多次匹配,就再匹配一次。exec会记录上一次的结果。

let str = 'wew3e34rwerwrr1234';
let reg = /\d+/g;
console.log(reg.exec(str)); //输出数组,找到内容,跟match相近
console.log(reg.exec(str));

在这里插入图片描述

3. 字符串方法

(1)split
let str = 'wew3e34rwerwrr1234';
let result = str.split(/r/);
console.log(result);

在这里插入图片描述

(2)replace 替换
let str = 'wew3e34rwerwrr1234';
let result = str.replace(/r+/g, '*');
console.log(result);

在这里插入图片描述

应用例子:词语匹配,(词语几个字显示成几个星)

let str = '2021年12月,北京2022年冬奥会向全世界展示“中国智造”,智慧冬奥无疑是北京冬奥会主要特点之一。';
let result = str.replace(/冬奥会/g, (value) => { 
return '*'.repeat(value.length);    
});
console.log(result);

在这里插入图片描述

(3)search 找到第一个符合结果的索引,找不到就-1,与indexOf相似
let str = 'wew3e34rwerwrr1234';
console.log(str.search(/rr/));
console.log(str.search(/a/));

在这里插入图片描述

(4)match
let str = 'wew3e34rwerwrr1234';
let result = str.match(/r+/g);
console.log(result);

在这里插入图片描述

4. 元字符 (正则中有特殊含义的非字母字符). * + ? ^ $ | \ () {}

想了解元字符点击MDN官网地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

对分组()举例: 将 2022-01-18 转换成 18/01/2022

let time = '2020-01-18';
let reg = /(\d{4})-(\d{2})-(\d{2})/g;
let result = time.replace(reg, "$3/$2/$1"); //$index能获取到第几个分组
console.log(result);

在这里插入图片描述

5. 匹配模式

(1)g

global,全局模式,找到所有匹配,而不是在第一个匹配后停止

(2)i

ignore,忽略大小写模式,匹配不区分大小写

(3)m

Multiple,多行模式,将开始和结束字符(^和$)视为在多行上工作,而不是只匹配整个输入字符串的最开始和最末尾处。

(4)s

dotAll/singleline,可以匹配换行符

(5)u

Unicodeunicode模式,匹配unicode字符集

console.log(/^.$/u.test("\uD842\uDFB7"));

(6)y

sticky,黏性模式,匹配正则中lastIndex属性指定位置的字符并且如果没有匹配也不尝试从任何后续的索引中进行匹配。要求索引是连续的,否则后面匹配不到

6. 零宽断言(Safari不兼容零宽后向断言)

(1)x(?=y) 零宽度正预测先行断言,匹配x仅仅当x后面跟着y
let str = 'iphone1iphone2iphone11iphone12iphoneNumber';
let reg = /iphone(?=\d{1,2})/g;       //只匹配iPhone,不匹配数字
let result = str.replace(reg, '苹果');
console.log(result);

在这里插入图片描述

(2) (?<=y) x,零宽度正回顾后发断言,匹配x仅当x前面是y
let str = '10px20px30pxipx';
let reg = /(?<=\d{2})px/g;
let result = str.replace(reg, '像素');
console.log(result);

在这里插入图片描述

(3) x(?!y) ,零宽度负预测先行断言,仅仅当x后面不跟着y时匹配x
let str = 'iphone1iphone2iphone11iphone12iphoneNumber';
let reg = /iphone(?!\d{1,2})/g;
let result = str.replace(reg, '苹果’);  //只匹配iPhone,不匹配number
console.log(result);

在这里插入图片描述

(4) (?<!y) x, 零宽度负回顾后发断言,仅仅当x前面不是y时匹配x
let str = '10px20px30pxipx';
let reg = /(?<!\d{2})px/g;
let result = str.replace(reg, '像素');
console.log(result);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值