js正则表达式(四):断言

js正则表达式(四):断言

?=

零宽先行断言,通俗地讲,后边是什么。可以理解为正则表达式中的条件语句。

例子:后盾人,后边是教程的加上链接

let str=`后盾人不断分享视频视频,学习后盾人教程提升编程能力`;
let reg=/后盾人(?=教程)/g;
let result;
console.log(result=str.replace(reg,'<a href="http://houdunren.com">$&</a>'));
document.body.innerHTML=result;

例子:

(?=元)这只是个条件,不会放到组里面

要跟“次”区分开

let str=`
    js,200元,300次
    php,300.00元,100次
    node.js,180元,260次
`;
let reg=/(\d+)(\.00)?(?=元)/gim;
// 这时候用了?=元的方法
// 这里的(?=元)是不会计入分组和结果中的
console.log(str.match(reg));
console.log(str.replace(reg,function(...args){
    console.log(args);
    args[2] = args[2] || '.00'
    return args.slice(1,3).join('')
}));

// 这是另一种方法
reg=/,(\d+)(?!\.00)元/gm;
console.log(str.match(reg));
console.log(str.replace(reg,',$1.00元'));

// 这是一个非常经典的千位符的例子
let str=`5987466214566`;
let reg=/(\d)(?=(\d{3})+$)/g;
console.log(str.replace(reg,function($1){
    return $1+",";
}))
reg=/\B(?=(\d{3})+$)/g
console.log(str.replace(reg,','));

js正则 ? - 千年轮回 - 博客园

JS给数字加千位分隔符 - 一粒一世界 - 博客园

?<=

零宽后行断言,说白一点,前面是什么。这是用来判断前面的条件。

注意断言,匹配结果是看不到的,不要把它当成组。

例子:把网址全部替换成www.houdunren.com

let str=`
    <a href="https://www.baidu.com">百度</a>
    <a href="https://www.taobao.com">上天猫,就购了</a>
`;
let reg=/(?<=href=(['"])).+(?=\1)/gi;
console.log(str.match(reg));
console.log(str.replace(reg,'https://www.houduren.com'));

例子:把电话后4位变成****展示

let str=`
    向军电话:13987673453
    后盾人电话:23232128978
`;
let reg=/(?<=\d{7})\d{4}/g;
console.log(str.match(reg));
console.log(result=str.replace(reg,'****'));

?!

零宽负向先行断言,可以理解为后面不是什么。

例子:不能出现向军

例子:

?<!

零宽负向后行断言,前面不是什么。

例子:改成oss.houdunren.com

let str=`
    <a href="https://www.houdunren.com/1.jpg">1.jpg</a>
    <a href="https://oss.houdunren.com/2.jpg">2.jpg</a>
    <a href="https://cdn.houdunren.com/3.jpg">3.jpg</a>
    <a href="https://houdunren.com/3.jpg">后盾人</a>
`
let reg=/(?<=href="https:\/\/).*(?=houdunren.com)/gm
console.log(str.match(reg));
console.log(str.replace(reg,'oss.'));

// 这是教程中的做法
reg=/https:\/\/([a-z]+)?(?<!oss)\..+?(?=\/)/g
console.log(str.match(reg));
console.log(str.replace(reg,'https://oss.houdunren.com'));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值