正则表达式

模版字面量

let bb = 'www.alrcly.com'
let a = 'y';
eval(`/${a}/`).test(bb)

使用对象的方式

let a = 'www.alrcly.com'
let reg = new RegExp('u','g')
console.log(reg.test(a))

匹配中文

hd.match(/\p{sc=Han}+/gu)

自己实现 matchAll() 函数

String.prototype.saMatchAll = function (reg) {
    let res = this.match(reg)
    if (res) {
        let str = this.replace(res[0], "^".repeat(res[0].length))
        let match = str.saMatchAll(reg) || []
        return [res, ...match]
    }
}

字符串里正则相关的方法

String.search(sv)

  • search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
  • 返回匹配字符串的下标,下标从 0 开始,如果没有找到任何匹配的子串,则返回 -1。
let a = 'abcdefg'
let b = 'a'
console.log(a.search(b))

String.match(regexp)

  • match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
  • 如果 regexp 没有标志 g,那么返回一个有详细信息的数组。
  • 如果 regexp 有标志 g,那么返回一个包含匹配项目的数组。
  • 如果没有找到任何匹配的文本,match() 将返回 null。
let a = 'abcdeadc'
let b = /a.c/g
console.log(a.match(b))

String.matchAll (regexp)

  • matchAll() 方法可在字符串内检索指定的值。
  • 表达式必须设置为 g (全局模式) 否则会报错。
  • 无论有没有找打匹配的文本,返回值都是一个迭代器
  • 如果没有找到任何匹配的文本,match() 将返回 null。
let a = 'abcdeadc'
let b = /a/gi
for (const tierator of a.matchAll(b)) {
    console.dir(tierator)
}

String.split (sv)

  • split() 方法把一个字符串分割成字符串数组。
  • 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
  • split() 方法不改变原始字符串。
let a = 'abc-dea/dc'
let b = /[-/]/gi
console.dir(a.split(b))

String.replace(sv,nv)

  • replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
  • sv 必须。规定子字符串或要替换的模式的 RegExp 对象。如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
  • nv 必需。一个字符串值。规定了替换文本或生成替换文本的函数。
    • $`:匹配到的文本内容前面部分
    • $':匹配到的文本内容后面部分
    • $&:匹配到的文本内容
let a = 'abc-dea/dc'
let b = /[-/]/gi
console.dir(a.replace(b, (item,d,f) => {
    return '@'
}))

原子组的别名

const reg = /<(h[1-6])>(?<newName>.*?)<\/\1>/gi
String.replace(reg,"<h4>$<newName></h4>")

正则的方法

RegExpObject.test(string)

  • test() 方法用于检测一个字符串是否匹配某个模式。
  • 如果字符串中有匹配的值返回 true,否则返回 false。
let str="Hello world!";
let patt=/Hello/gi;
console.log(patt.test(str)); 

RegExpObject.exec(string)

  • exec() 方法用于检索字符串中的正则表达式的匹配。
  • 如果字符串中有匹配的值返回该匹配值,否则返回 null。
var str="Hello world!";
var patt=/Hello/g;
var result=;
console.log(patt.exec(str)); 

断言

  • 可以理解为正则表达式中的条件语句

?= 断言匹配

  • 条件:后面得是什么
let main = '各个国家有各个国家的国歌'
let reg = /国家(?=的)/g
let show = main.replace(reg, `<a herf="https://www.alrcly.com">$&</a>`)
console.log(show)

?<= 断言匹配

  • 条件:前面得是什么
let main = '各个国家有各个国家的国歌'
let reg = /(?<=的) 国歌/g
let show = main.replace(reg, `<a herf="https://www.alrcly.com">$&</a>`)
console.log(show)

?! 断言匹配

  • 条件:后面不是什么
let main = '各个国家有各个国家的国歌'
let reg = /国家(?!的)/g
let show = main.replace(reg, `<a herf="https://www.alrcly.com">$&</a>`)
console.log(show)

?<! 断言匹配

  • 条件:前面不是什么
let main = '各个国家有各个国家的国歌'
let reg = /(?<!的) 国歌/g
let show = main.replace(reg, `<a herf="https://www.alrcly.com">$&</a>`)
console.log(show)