最近再一次重温老姚大佬的《JavaScript 正则表达式迷你书》 , 并将核心知识点整理一遍,方便复习。

原书写得非常棒,建议看下原书啦。  地址:https://github.com/qdlaoyao/js-regex-mini-book

位置匹配,就是要匹配每个字符两边的位置。

ES5 中有6个位置:^$\b\B(?=p)(?!p)

另外把位置理解成空字符是非常有用的:

/^^hello$$/.test('hello');  // true
/^^^hello$$/.test('hello'); // true

1. ^ 和 $

^ 匹配开头,多行中匹配行开头。
$ 匹配结尾,多行中匹配行结尾。

"hello".replace(/^|$/g, "#"); // "#hello#"
"hello\nleo\nhaha".replace(/^|$/gm, "#");
/*
#hello#
#leo#
#haha#
*/

多行匹配模式使用 m 修饰符。

2. \b\B

\b 匹配单词边界,即 \w\W 之间的位置,包括 \w^ 之间的位置,和 \w$ 之间的位置。
\B 和  \b 相反,即非单词边界,匹配中除去 \b,剩下的都是 \B 的。也就是 \w\w\W\W^\W\W$ 之间的位置。。

"[HI] Leo_1.mp4".replace(/\b/g,"#");
// "[#HI#] #Leo_1#.#mp4#""[HI] Leo_1.mp4".replace(/\B/g,"#");
// "#[H#I]# L#e#o#_#1.m#p#4"

3. (?=p)(?!p)

p 为一个子模式,即 (?=p) 匹配前面是 p 的位置,而 (?!p) 则匹配前面不是 p 的位置。

"hello".replace(/(?=l)/g, "#");
// "he#l#lo""hello".replace(/(?!l)/g, "#");
// "#h#ell#o#"

4. 相关案例

  • 匹配数字千位分隔符

// 匹配最后一个逗号
"12345678".replace(/(?=\d{3}$)/g, ","); // "12345,678"// 匹配所有逗号
"12345678".replace(/(?=(\d{3})+$)/g, ","); // "12,345,678"// 匹配其余
"123456789".replace(/(?=(\d{3})+$)/g, ","); // ",123,456,789"// 修改
"123456789".replace(/(?!^)(?=(\d{3})+$)/g, ","); // "12,345,678"// 其他形式
"12345678 123456789".replace(/(?!\b)(?=(\d{3})+\b)/g, ",");
// (?!\b) 等于 \B ,要求当前是一个位置,但不是 \b 前面的位置
// "12,345,678 123,456,789"
  • 数据格式化

let num = 1888;
num.toFixed(2).replace(/\B(?=(\d{3})+\b)/g, ",").replace(/^/,"$$ ");
// "$ 1,888.00"
  • 验证密码

// 密码长度 6-12 位数字或字母
let r = /^[0-9A-Za-z]{6,12}$/;// 必须包含一个字符(数字) + 密码长度 6-12 位数字或字母
let r = /(?=.*[0-9])^[0-9A-Za-z]{6,12}$/;// 必须包含两个个字符(数字和小写字符)  + 密码长度 6-12 位数字或字母
let r = /(?=.*[0-9])(?=.*[a-z])^[0-9A-Za-z]{6,12}$/;r.test("aa1234566"); // true
r.test("1234566");   // false// 密码长度 6-12 位数字或字母
// 即 不能全是数字 或 不能全是大写或小写字母
let r = /(?!^[0-9]{6,12}$)(?!^[a-z]{6,12}$)(?!^[A-Z]{6,12}$)^[0-9A-Za-z]{6,12}$/;

1. JavaScript 重温系列(22篇全)

2. ECMAScript 重温系列(10篇全)

3. JavaScript设计模式 重温系列(9篇全)

4. 正则 / 框架 / 算法等 重温系列(16篇全)

5. Webpack4 入门(上)|| Webpack4 入门(下)

6. MobX 入门(上) ||  MobX 入门(下)

7. 120+篇原创系列汇总

回复“加群”与大佬们一起交流学习~

点击“阅读原文”查看 120+ 篇原创文章

【正则】956- 正则表达式有几种位置匹配模式?相关推荐

  1. rabbitmq中的三种交换器(匹配模式)

    direct(直接交换模式) 消息中的路由键(routing key)如果和Binding中的binding key一致,交换器就将消息发到对应的队列中.它是完全匹配,单播的模式. fanout(广播 ...

  2. 一起学习正则表达式(四)常见的4种匹配模式

    转载请注明出处:https://blog.csdn.net/kong_gu_you_lan/article/details/119101667 本文出自 容华谢后的博客 往期回顾: <一起学习正 ...

  3. 总结:Prometheus匹配模式

    一.介绍 本文主要记录下prometheus的匹配模式. 在写PromQL时候,经常会需要根据tag匹配,比如我们常用的tagkey=tagval. 其实PromQL的匹配有多种,本文总结下. 二.完 ...

  4. Pattern的多种匹配模式 -- 《JAVA编程思想》42

    Pattern.complie(String regex) 方法可用来生成 Matcher 类,但它还有个重载的 Pattern.complie(String regex,int flag)方法可以用 ...

  5. 正则表达式是匹配模式,要么匹配字符,要么匹配位置

    正则表达式是匹配模式,要么匹配字符,要么匹配位置 正则表达式之所以强大,是因为它能实现模糊匹配 模糊匹配有两个方向上的匹配: ​ 横向模糊 ​ 纵向模糊 横向模糊 一个正则可匹配的字符串的长度不是固定 ...

  6. 正则表达式三种匹配模式:贪婪模式,勉强模式,占有模式的区别

    正则表达式一共有三种模式:贪婪模式.勉强模式.侵占模式. 我在做项目的时候,曾领教过正则"回溯陷阱"的厉害,所以,今天做个总结下正则常见的两种模式的区别: [贪婪模式]:正则表达式 ...

  7. java中正则全局匹配_JS中正则表达式全局匹配模式/g用法实例

    JS中正则表达式全局匹配模式 /g用法详解 本文章来详细介绍js中正则表达式的全局匹配模式 /g用法, var str = "123#abc"; var re = /abc/ig; ...

  8. 首尾非零正则_常用的17种正则表达式

    17种正则表达式 "^\\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\\d+)|(0 ...

  9. js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)...

    js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global) 一.总结 1. ...

最新文章

  1. Java项目:中小医院信息管理系统(java+Springboot+ssm+mysql+maven+jsp)
  2. java闭包lambda,闭包在groovy vs闭包在java 8(lambda表达式)?
  3. [USACO1.2]挤牛奶Milking Cows
  4. asp python 定时任务_Python定时任务轻量解决方案——Schedule
  5. Spring Boot 热部署入门
  6. 动态sql (sql-if,sql-foreach)
  7. ibm服务器系统电池型号,IBM服务器_X366型号2003系统恢复
  8. 基于CentOS7.2安装Kubernetes-v1.2
  9. Eclipse/NSight: methond could not resolved
  10. Javascript读取本地文件
  11. hdoj1299 还是A+B
  12. service mesh:istio全
  13. python伪装ip地址_python伪造ip
  14. 文件服务器查询重复文件,DupScout – 重复文件扫描、删除或移动的免费工具
  15. 小程序设置整个页面的背景颜色
  16. 2019.10.15
  17. css解决谷歌,360浏览器默认最小字体为12px问题
  18. char *与char []的区别
  19. 编程萌新必看!初学C语言必会的知识点,你学废了吗?
  20. 用inno Setup做应用程序安装包的示例脚本(.iss文件)(

热门文章

  1. R语言初学——包的应用
  2. matlab中sr锁存器,VHDL中的简单SR锁存器仿真(带Xilinx)不会振荡
  3. 福大软工 · 第七次作业 - 需求分析报告(404 Note Found队)
  4. 如何为linux5添加中文包,linux 5.x 怎么安装中文语言包
  5. 机器学习教程 之 线性模型:线性回归、对数几率回归、线性判别分析
  6. vue点击按钮怎么跳转图片_vue下的h5页面实现点击图片跳转小程序
  7. 阿里云牵手英伟达推出初创加速计划,算力触手可得
  8. 武汉区块链软件技术公司:区块链发展已然势不可挡,触手可及的地步
  9. windows下用pip国内源的方式安装pytorch
  10. JavaScript登录验证