正则断言(环视)
正则断言说明
正则断言又称环视/预查,用于正则匹配中正向肯定性检查、正向否定性检查、反向肯定性检查、反向否定性检查,只检查是否匹配不占用正则匹配位,有以下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