正则表达式使用说明(基础知识,原子字符,模式修饰,原子表,原子组,重复匹配)

基础知识

选择符

| 这个符号带表选择修释符,也就是 | 左右两侧有一个匹配到就可以。

let tel = "010-12345678";
//错误结果:只匹配 | 左右两边任一结果
console.log(tel.match(/010|020\-\d{7,8}/)); 

//正确结果:所以需要放在原子组中使用
console.log(tel.match(/(010|020)\-\d{7,8}/));

字符转义

\ 这个符号带表选择修释符,也就是将 \ 右侧特殊字符转义 如/$^等

const url = "https://www.baidu.com";
console.log(/https:\/\//.test(url)); //true

边界符说明
^匹配字符串的开始
$匹配字符串的结束,忽略换行符

原子字符

所有的原子字符:

元字符说明示例
\d匹配任意一个数字[0-9]
\D与除了数字以外的任何一个字符匹配[^0-9]
\w与任意一个英文字母,数字或下划线匹配[a-zA-Z_]
\W除了字母,数字或下划线外与任何字符匹配[^a-zA-Z_]
\s任意一个空白字符匹配,如空格,制表符\t,换行符\n[\n\f\r\t\v]
\S除了空白符外任意一个字符匹配[^\n\f\r\t\v]
.匹配除换行符外的任意字符

匹配所有字符:

可以使用 [\s\S] 或 [\d\D] 来匹配所有字符

let yq = `
  <span>
    @#&^&*!
    123
    asda
  </span>
`;
let res = yq .match(/<span>[\s\S]+<\/span>/);
console.log(res[0]);

模式修饰

修饰符说明
i不区分大小写字母的匹配
g全局搜索所有匹配内容
m视为多行
s视为单行忽略换行符,使用. 可以匹配所有字符
y从 regexp.lastIndex 开始匹配
u正确处理四个字符的 UTF-16 编码

lastIndex

RegExp对象lastIndex 属性可以返回或者设置正则表达式开始匹配的位置

  • 必须结合 g 修饰符使用
  • 对 exec 方法有效
  • 匹配完成时,lastIndex 会被重置为0
let yq = `1234561`;
let reg = /1/g;
reg.lastIndex = 1; //从索引1开始搜索
console.log(reg.exec(yq));
console.log(reg.lastIndex);

原子表

在一组字符中匹配某个元字符,在正则表达式中通过元字符表来完成,就是放到[] (方括号)中,并且原子表中部分字符不需要转义,例如.就是小数点。

原子表说明
[]只匹配其中的一个原子
[^]只匹配"除了"其中字符的任意一个原子
[0-9]匹配0-9任何一个数字
[a-z]匹配小写a-z任何一个字母
[A-Z]匹配大写A-Z任何一个字母

可以使用 [\s\S] 或 [\d\D]匹配到所有字符包括换行符

const reg = /[\s\S]+/g;

字母和数字必须为升序否则会报错

const num = "2";
console.log(/[3-0]/.test(num)); //SyntaxError

const yq = "asdasdasd";
console.log(/[f-a]/.test(yq)); //SyntaxError

原子组

基本使用

没有添加 g 模式修正符时只匹配到第一个,匹配到的信息包含以下数据

变量说明
0匹配到的完整内容
1,2....匹配到的原子组
index原字符串中的位置
input原字符串
groups命名分组

match中使用原子组匹配,会将每个组数据返回到结果中

  • 0 为匹配到的完成内容
  • 1/2 等 为原子级内容
  • index 匹配的开始位置
  • input 原始数据
  • groups 组别名
let hd = "baidu.com";
console.log(hd.match(/bai(du)\.(com)/)); 
//["baidu.com", "du", "com", index: 0, input: "baidu.com", groups: undefined]

引用分租和分租别名

\n 在匹配时引用原子组,如果只希望组参与匹配,便不希望返回到结果中使用 (?: 处理((?:匹配字符)),如果希望返回的组数据更清晰,可以为原子组编号,结果将保存在返回的 groups字段中,组别名使用 ?<> 形式定义,下面将标签替换为p标签。

let yq = `
  <h1>yq</h1>
  <span>20</span>
  <h2>180</h2>
`;
let reg = /<(?<tag>h[1-6])>(?<con>[\s\S]*)<\/\1>/gi;
console.log(yq.replace(reg, `<p>$<con></p>`));

重复匹配

如果要重复匹配一些内容时我们要使用重复匹配修饰符,包括以下几种。

符号说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

正则表达式在进行重复匹配时,默认是贪婪匹配模式,也就是说会尽量匹配更多内容,但是有的时候我们并不希望他匹配更多内容,这时可以通过?进行修饰来禁止重复匹配。

使用说明
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复
let str = "aaa";
console.log(str.match(/a+/)); //aaa
console.log(str.match(/a+?/)); //a
console.log(str.match(/a{2,3}?/)); //aa
console.log(str.match(/a{2,}?/)); //aa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值