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

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

?=

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

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

let str=`后盾人不断分享视频视频,学习后盾人教程提升编程能力`;
let reg=/后盾人(?=教程)/g;
let result;
console.log(result=str.replace(reg,'$&'));
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=`
    百度
    上天猫,就购了
`;
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,'****'));

?!

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

例子:不能出现向军

js正则表达式(四):断言_第1张图片

例子:

js正则表达式(四):断言_第2张图片

?

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

例子:改成oss.houdunren.com

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

// 这是教程中的做法
reg=/https:\/\/([a-z]+)?(?

你可能感兴趣的:(javascript,正则表达式)