正则表达式中()、\1、$&、$1、?:、?=的含义

禁止贪婪 +? 取一个 *? 取零

    {
      const str = "abbbb";
      const reg = /ab+?/ig;
      const reg2 = /ab*?/ig;
      console.log(str.match(reg)); // ['ab']
      console.log(str.match(reg2)); // ['a']
    }

原子表 []

  • + 在原子表[]中指的就是字符串 + ,不需要进行转义
  • + 在外面指的是匹配一次到多次
    {
      const str = "abcde+.";
      const reg = /[a+]/ig;
      console.log(str.match(reg)); // ["a", "+"]
    }

多个正则匹配

由字母数字4-8位且必须包含大写字母

    {
      const str = "cdw1X";
      const reg = [
        /^[a-z0-9]{4,8}$/gi,
        /[A-Z]/g
      ]

      const status = reg.every(item => item.test(str))
      console.log(status);// true
    }

$’ $& $`

  • $` 匹配到的前面的内容
  • $& 匹配到的内容
  • $’ 匹配到的后面的内容
    {
      const str = "锄禾日当午";
      const reg = //i;
      console.log(str.replace(reg, "$`$&$'")); // 锄禾锄禾日当午当午


    
      const str = "锄禾日当午";
      const reg = /锄禾/i;
      console.log(str.replace(reg, "<div>$&</div>")); // <div>锄禾</div>日当午
    
    }

原子组 ()

从左向右第一个原子组 正则中使用 \1 表示
在 replace 方法中第二个参数是字符串情况下 $1 表示,
在 replace 方法中第二个参数是函数情况下 第二个参数即是原子组1

    {
      // 20230204 -> 2023-02-04
      const str = "20230204";
      const reg = /(\d{4})(\d{2})(\d{2})/gi;
      console.log(str.match(reg));
      console.log(str.replace(reg, "$1-$2-$3")); // 2023-02-04

    
      const str = `<h1>oooo</h1><span>span</span>`;
      const reg = /<(h[1-6])>([\s\S]+)<\/\1>/gi;
      // console.log(22, str.replace(reg, '<p>$2</p>')); // <p>oooo</p><span>span</span>
      // <p>oooo</p><span>span</span>
      // 第一个参数匹配的值 第二个参数指的是原子组1 类推2,3
      console.log(22, str.replace(reg, (...b) => {
        console.log('b', b);
        return `<p>${b[2]}</p>`
      }));
    
    }

取消原子组副作用(即不记录原子组) ?:

    {
      const str = "锄禾日当午";
      const reg = /(日)/i;
      console.log(str.replace(reg, "$1")); // 锄禾日当午
    

    
      const str = "锄禾日当午";
      const reg = /(?:日)/i;
      console.log(str.replace(reg, "$1")); // 锄禾$1当午


    
      const str = `<h1>锄禾日当午</h1>`;
      const reg = /<(h[1-6])>(.*?)<\/(h[1-6])>/gi;
      console.log(str.replace(reg, "<div>$2</div>"));
    
    }

原子组别名

    {
      const str = `<h1>锄禾日当午</h1>`;
      const reg = /<(h[1-6])>(?<con>.*?)<\/\1>/gi;
      console.log(str.replace(reg, "<div>$<con></div>"));
    }

?=

exp1(?=exp2):查找 exp2 前面的 exp1。

    {
      const reg = /run(?=[\d-+])/g
      const str = '123run456run-'
      console.log(str.match(reg)); // ["run", "run"]
    }
// (?<=exp2)exp1:查找 exp2 后面的 exp1。

// exp1(?!exp2):查找后面不是 exp2 的 exp1。

// (?<!exp2)exp1:查找前面不是 exp2 的 exp1。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值