正则表达式断言,正则表达式环视,正则表达式预查,正则表达式前瞻,正则表达式后顾

正则表达式断言,正则表达式环视,正则表达式预查,正则表达式前瞻,正则表达式后顾

正则断言(环视)

正则断言说明

正则断言又称环视/预查,用于正则匹配中正向肯定性检查、正向否定性检查、反向肯定性检查、反向否定性检查,只检查是否匹配不占用正则匹配位,有以下4中语法

正则断言使用

未使用断言的正则匹配

// 使用 . 匹配任意字符串
console.log( /.+/.test('xyzxyz') );  // true
console.log( /.+/.exec('xyzxyz') );  // ["xyzxyz"]

使用 肯定性前瞻 检查

// 检查成功示例
// 按正则顺序,先进行 肯定性前瞻 检查,检查到 x 时符合要求则检查结束,由后面的正则从符合要求处开始匹配
console.log( /(?=[x-z]+).+/.test('abcxyz') )   // true
console.log( /(?=[x-z]+).+/.exec('abcxyz') );  // ["xyz"]
// 检查失败示例
// 按正则顺序,先进行 肯定性前瞻 检查,检查到最后都不符合规则,则正则整体匹配失败
console.log( /(?=[0-9]+).+/.test('abcxyz') )   // false
console.log( /(?=[0-9]+).+/.exec('abcxyz') );  // null

使用 否定性前瞻 进行检查

// 检查成功示例
// 按正则顺序,先进行 否定性前瞻 检查,检查到 a 时符合要求则检查结束,由后面的正则从符合要求处开始匹配
console.log( /(?![x-z]+).+/.test('abcxyz') )   // true
console.log( /(?![x-z]+).+/.exec('abcxyz') );  // ["abcxyz"]
// 检查失败示例
// 按正则顺序,先进行 否定性前瞻 检查,检查到最后都不符合要求,则正则整体匹配失败
console.log( /(?![a-z]+).+/.test('abcxyz') )   // false
console.log( /(?![a-z]+).+/.exec('abcxyz') );  // null

使用 肯定性后顾 进行检查

// 检查成功示例
// 按正则顺序,先进行正则匹配,匹配完成后再进行 肯定性后顾 检查,从后往前逐一进行,检查到 x 处才符合要求,正则匹配回退到 x 处
console.log( /.+(?<=[x]+)/.test('abcxyz') )   // true
console.log( /.+(?<=[x]+)/.exec('abcxyz') );  // ["abcx"]
// 检查失败示例
// 按正则顺序,先进行正则匹配,匹配完成后再进行 肯定性后顾 检查,从后往前逐一进行,都不符合要求,正则匹配失败
console.log( /.+(?<=[0-9]+)/.test('abcxyz') )   // false
console.log( /.+(?<=[0-9]+)/.exec('abcxyz') );  // null

使用 否定性后顾 进行检查

// 检查成功示例
// 按正则顺序,先进行正则匹配,匹配完成后再进行 否定性后顾 检查,从后往前逐一进行,检查到 c 处才符合要求,正则匹配回退到 c 处
console.log( /.+(?<![x-z]+)/.test('abcxyz') )   // true
console.log( /.+(?<![x-z]+)/.exec('abcxyz') );  // ["abc"]
// 检查失败示例
// 按正则顺序,先进行正则匹配,匹配完成后再进行 否定性后顾 检查,从后往前逐一进行,都不符合要求,正则匹配失败
console.log( /.+(?<![a-z]+)/.test('abcxyz') )   // false
console.log( /.+(?<![a-z]+)/.exec('abcxyz') );  // null