正则表达式中()、\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, "
$&
"
)); //
锄禾
日当午
}

原子组 ()

从左向右第一个原子组 正则中使用 \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 = `

oooo

span
`
; const reg = /<(h[1-6])>([\s\S]+)<\/\1>/gi; // console.log(22, str.replace(reg, '

$2

')); //

oooo

span
//

oooo

span
// 第一个参数匹配的值 第二个参数指的是原子组1 类推2,3 console.log(22, str.replace(reg, (...b) => { console.log('b', b); return `

${b[2]}

`
})); }

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

    {
      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 = `

锄禾日当午

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

原子组别名

    {
      const str = `

锄禾日当午

`
; const reg = /<(h[1-6])>(?.*?)<\/\1>/gi; console.log(str.replace(reg, "
$
"
)); }

?=

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。

// (?

你可能感兴趣的:(JavaScript,正则表达式,javascript)