正向预查和负向预查

正向预查(只起到判断左右)

  • 零宽度断言 - 只起到判断左右
  • 正向预查(零宽度断言) - 代表从左到右进行匹配
// 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 $;
}));

参考

  • https://www.cnblogs.com/boundless-sky/p/7597631.html
  • https://www.cnblogs.com/dh-dh/p/5261044.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值