正向预查和负向预查
原创
©著作权归作者所有:来自51CTO博客作者待???的一天的原创作品,请联系作者获取转载授权,否则将追究法律责任
正向预查(只起到判断左右)
- 零宽度断言 - 只起到判断左右
- 正向预查(零宽度断言) - 代表从左到右进行匹配
// keyword(?:pattern) - 只匹配满足条件的keyword和pattern
console.log( "windows 10".match(/windows\s(?:10)/));
// keyword(?=pattern) - 只匹配满足pattern条件的keyword,不包括pattern,pattern只起到判断作用
console.log( "windows 10".match(/windows\s(?=10)/)); // 不包括10
console.log( "windows 10".match(/windows\s(?=7)/)); // null
// keyword(?!pattern) - 只匹配不满足pattern条件的keyword,不包括pattern,pattern只起到判断作用
console.log( "windows 10".match(/windows\s(?!7)/)); // windows
例子1
- 匹配出现符合的前缀字符
// 匹配出现符合的前缀字符
const str = "\
Windows 1.03 and Windows 2.0 fisrt Released in 1985 and 1987 respectively.\
Windows 95 and Windows 98 are the successor.\
Then Windows 2000 and Windows Xp appeared.\
Windows Vista is the Latest version of the family."
const reg = /Windows (?=[\d.]+\b)/g;
console.log(str.match(reg));
// 出现ing后缀的单词
var con="coming soon,going gogogo coming"
var reg4 = /\b[\w]+(?:ing\b)/g;//匹配带ing的单词,但是不要ing。注意:如果ing后不加\b,类似于goingabc也会匹配。
console.log(con.match(reg4));
例子2
- 去除多余的 ,.\r\n<>;-
const str1 = "aaaax-aaa";
const reg1 = /(x)(?:[,.\r\n<>;\-])/g;
console.log(str1.replace(reg1, function($, $1) {
return $1;
}));
负向预查 (从右向左匹配)
// (? <= pattern) keyword 只匹配满足pattern条件的keyword,不包括pattern,pattern只起到判断作用
console.log( "7 windows 10".match(/(?<=7)\swindows\s/)); // windows
// (? <! pattern) keyword 只匹配不满足pattern条件的keyword,不包括pattern,pattern只起到判断作用
console.log( "7 windows 10".match(/(?<!7)\swindows\s/)); // windows
例子1
- 查找匹配的后缀
// 反向预查
const reg2 = /(?<=CNY: )\d+\.\d/g;
const str2 = "CNY: 128.04\
USD: 22.5\
USD: 23.5\
HKD: 1533.5\
CNY: 23.78";
console.log(str2.match(reg2));
例子2
- 有问题
// 这个有问题 待解决
const reg3 = /(?<=:[,.\r\n<>;\-])x/g;
const str3 = "aaa-xaaaa";
console.log(str3.replace(reg3, function($, $1) {
return $;
}));