正则断言

先行断言

  • /x(?=y)x/ 匹配后边紧跟着'y'的'x'(分析要匹配内容的后边), 'y'不算是匹配内容的部分
    • no: 'xzy'
    • yes: 'xy'
// 千分符
const str = '23418423'
str.replace(/\d{1,3}(?=(\d{3})+$)/g, `$&,`) // "23,418,423"

// 密码验证
// 至少一个数字
// 至少一个小写字母
// 至少一个大写字母
// 至少一个数字
const str = 'djI38D55'
const reg = return /^(?=.*[a-z])(?=.*\d)(?=.*[A-Z])[A-Za-z\d$@!%#?&.]{6,}$/g
reg.test(str) // true
复制代码

后行断言

  • /(?<=y)x/ 与先行断言相反, 匹配前边紧挨着'y'的'x'(分析要匹配内容的前边), 'y'不算是匹配内容的部分
    • no: 'yzx'
    • yes: 'yx'
// 反向千分符
const str = '23418423'
str.replace(/(?<=^(\d{3})+)\d{1,3}/g, `,$&`) // "234,184,23"
复制代码

正向否认

  • /x(?!y)x/ 匹配后边不紧跟着'y'的'x'(分析要匹配内容的后边), 'y'不算是匹配内容的部分
    • no: 'xy'
    • yes: 'xzy'
// 匹配后边没有跟小数点的数字
const str = '3.14'
const reg = /\d+(?!\.)/g
str.match(reg) // ['14']
复制代码

反向否认

  • /(?<!y)x/ 与正向否认相反, 匹配前边不紧挨着'y'的'x'(分析要匹配内容的前边), 'y'不算是匹配内容的部分
    • no: 'yx'
    • yes: 'yzx'
// 匹配前边没有'-'符号的数字
const str = '-1024'
const reg = /(?<!-)\d+/g
str.match(reg) // ['024']
复制代码

参考

RegExpide

replaceui

相关文章
相关标签/搜索