正則斷言

先行斷言

  • /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

相關文章
相關標籤/搜索