正则表达式
模版字面量
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)