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'));

js正则表达式(四):断言相关推荐

  1. js正则表达式-前瞻

    js正则表达式-前瞻 JS 正则表达式是 JS 学习过程中的一大难点,繁杂的匹配模式足以让人头大,不过其复杂性和其学习难度也赋予了它强大的功能.文章从 JS 正则表达式的正向前瞻说起,实现否定匹配的案 ...

  2. JS 正则表达式否定匹配(正向前瞻)

    引言 JS 正则表达式是 JS 学习过程中的一大难点,繁杂的匹配模式足以让人头大,不过其复杂性和其学习难度也赋予了它强大的功能.文章从 JS 正则表达式的正向前瞻说起,实现否定匹配的案例.本文适合有一 ...

  3. JS正则表达式完整版

    目录 引言 第一章 正则表达式字符匹配攻略 1 两种模糊匹配 2. 字符组 3. 量词 4. 多选分支 5. 案例分析 第1章 小结 第二章 正则表达式位置匹配攻略 1. 什么是位置呢? 2. 如何匹 ...

  4. 【JS-正则表达式】JS正则表达式完整教程(略长)

    引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. ...

  5. JS正则表达式完整教程

    引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. ...

  6. JS正则表达式完整教程(略长)

    注:本文已经整理成电子书:<JavaScript正则迷你书> 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水 ...

  7. 正则满足中文的顿号_常用的正则表达式、正则表达式之断言

    一.常用的正则表达式: 1.手机号码:/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$/ 2.国内电话号码:/d ...

  8. JS正则表达式大全(整理详细且实用)

    JS正则表达式大全(整理详细且实用) 作者: 字体:[增加 减小] 类型:转载 时间:2013-11-14 我要评论 JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助 ...

  9. js 字符串替换_正则精要:玩转JS正则表达式,也许只需这一篇(建议收藏)

    0.导引 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个程序可以识别的规则,有了这个规则,程序就可以帮我们判断某些字符是否符合我们的要求.但是,我们为什么要 ...

最新文章

  1. 关于学习Python的一点学习总结(24->列表推导)
  2. Windows2008 R2下,DCOM配置里的属性灰色不可用的解决方法
  3. python下载方法-python实现下载文件的三种方法_python
  4. 2019 湖南多校第五场题解
  5. boost::spirit模块实现一个以逗号分隔的数字列表的生成器的测试程序
  6. python随机生成20个数字_python – 生成大量唯一的随机float32数字
  7. 嵌入式系统——流水线处理机执行时间计算
  8. Linux 开发环境搭建与使用——SlickEdit 简单使用教程
  9. 最全36种python设计模式
  10. Java练习题2-基础(含解析)
  11. linux怎么进入系统安装界面,Linux图形化界面安装全过程
  12. STM32单片机的学习方法(方法大体适用所有开发版入门)
  13. 为什么选择ROS2编程作为机器人工程课程之一?
  14. java 计时 纳秒_Java精确测量代码运行时间 代码执行时间 纳秒 nanoTime
  15. C2248: QString::QString: 无法访问 private 成员(在 QString 类中声明)
  16. 试验数据管理平台解决方案--MDM
  17. 大学物理 期末考试公式集锦
  18. 双系统win10自动改动EFI启动顺序解决方案
  19. WSockExpert抓包工具
  20. Liunx系统编程(五)网络编程

热门文章

  1. 【推荐】送给优柔寡断和胡思乱想的朋友们17条人生哲理
  2. JavaScript从零开始 学习记录(三)
  3. 1分36秒,100亿的背后,双11前支付宝工程师竟然要拜关公?
  4. 高通WLAN框架学习(23)-- Target wake time (TWT)
  5. 分布式场景实战第六节 微服务数据治理方案
  6. PCB画板(Altium Designer)
  7. 【6032】一次“大促”运营的零碎记录
  8. iOS开发:什么是Bonjour
  9. Vue.js:vue指令(给标签属性赋Vue变量v-bind,绑定事件 v-on)vue事件处理函数中, 拿到事件对象,6个事件修饰符
  10. MotoSimEG-VRC软件:基于伺服焊枪的机器人点焊虚拟仿真