前几篇有用到过, 但是未做深入学习,发现一篇很好的博文

转载自 javascript--正向预查

什么是正向预查?这里有腾讯招聘的一个例子:

如何给一串数字用千分制表示?比如9999999999变成9,999,999,999。这样一个问题你会怎么答呢?博主js正则学的不咋样,然后用操作字符串的办法做,变成字符串,先除以3,看有几对,然后再加逗号…………(省略无数个步骤)

直到有一天我看到了这样一个回答:

var f = '99999999999'.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,');

console.log(f);

一行代码搞定了。我当时是惊呆的0.0,但是不知道这是啥意思阿。就重新学了一遍正则,发现里面有个叫正向预查的东西,很神奇,就一起来看看这是什么鬼。

(?=)这个东西就是正向预查。

先给一个简单的例子:

var con="coming soon,going gogogo"

var reg = /\b[\w]+(?=ing\b)/g;//匹配带ing的单词,但是不要ing。注意:如果ing后不加\b,类似于goingabc也会匹配。

console.log(con.match(reg));

这里匹配到["com", "go"]。先匹配单词边界\b,然后+匹配前面多次或者一次,然后到这个正向预查,(?=ing)表示先向后探测,看看有没有ing。如果有,则把前面的匹配出来;如果没有,则光标往后移一位,继续探测。这个过程就是正向预查:预先判断为某个值。然后匹配到的东西不包含这个元素,这里也就是ing。官方原话是该匹配不需要获取以供以后使用,是一个非捕获匹配。

相似的还有非捕获性数组: (?: )

var color = "#990000";

/#(?:\d+)/.test(color);

alert(RegExp.$1);//""

这里的正向预查,属于零宽断言,也是正向前瞻。

零宽断言

正则

名称

描述

(?=exp)

正向前瞻

匹配exp前面的位置

(?!exp)

负向前瞻

匹配后面不是exp的位置

(?<=exp)

正向后瞻

匹配exp后面的位置(不支持)

(?!exp)

负向后瞻

匹配后面不是exp的位置(不支持)

正向前瞻用来检查接下来的出现的是不是某个特定的字符集。而负向前瞻则是检查接下来的不应该出现的特定字符串集。零宽断言是不会被捕获的。

不过javascript不支持后瞻。

好,回到我们的问题,为了方便观察,我们换做1234567890来匹配

"1234567890".match(/\d{1,3}(?=(\d{3})+$)/g)

\d首先贪婪匹配123,成功,进入顺序肯定环视,456,789匹配成功,控制权交到$匹配789,匹配失败,回溯

\d匹配12,成功,进入顺序肯定环视,345,678匹配成功,控制权交到$匹配678,匹配失败,回溯

\d匹配1,成功,进入顺序肯定环视,234,567,890,控制权交到$匹配890,匹配成功.

\d贪婪匹配234,成功,进入顺序肯定环视,567,890匹配成功,控制权交到$匹配890,匹配成功

\d贪婪匹配567,成功,进入顺序肯定环视,890匹配成功,控制权交到$匹配890,匹配成功

\d贪婪匹配890,成功,进入顺序肯定环视,匹配空字符串匹配失败,匹配失败。

\d匹配89,\d匹配8在顺序肯定环视里都会失败,于是返回。

文档匹配1,234,567

还有一些资料:

image.png

image.png

php正则表达式正向预查,javascript正则表达式-----正向预查相关推荐

  1. 正则表达式入门教程经典Javascript正则表达式(share)

    前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...

  2. 经典JavaScript正则表达式实战

    来源:http://www.cainiao8.com/web/js_note/js_regular_expression_blueidea.html 目录 1. 正则表达式实战...1    2. 匹 ...

  3. javascript正则表达式复习

    javascript的正则表达式复习 参考资源: w3cschool javascript regexp 菜鸟吧 javascript正则表达式 这里主要记录几个自己之前不是很熟悉的知识点,其他的知识 ...

  4. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  5. javascript正则表达式-姜威-专题视频课程

    javascript正则表达式-2824人已学习 课程介绍         本课程以 javascript 程序为基础,主讲在js中正则的用法,课程内提供测试环境,所有规则简单易懂,围绕着js的相关函 ...

  6. JavaScript 正则表达式 处理json,json对象的遍历和处理

    //********* https://www.runoob.com/js/js-regexp.html ****// 正则表达式.exec( ) new RegExp("\\{" ...

  7. javascript 正则表达式 幽灵的礼物

    javascript 正则表达式 好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的 ...

  8. JavaScript正则表达式的个人笔记

    正则表达式 一.正则表达式创建 1.`var reg = /test/;` 2.`var reg = new RegExp('test');` 3.正则表达式的exec方法 二.正则表达式模式 1.一 ...

  9. JavaScript正则表达式快速判断技巧

    原文:JavaScript正则表达式快速判断技巧 这里是JS的正则的一点心得,并不是最完整的规则汇总,更侧重实际运用中的快速判断,初学者接触正则之后往往会被一堆星号括号给弄晕,有了一些速判技巧就能从整 ...

最新文章

  1. 《C语言及程序设计》实践参考——当年第几天
  2. PXE批量部署linux操作系统
  3. java jsp setAttribute setParameter 区别
  4. 【原创】new和delete
  5. 云炬随笔20210714(1)
  6. linux安装tomcat_【零基础学云计算】详述Linux系统中Tomcat部署及优化
  7. Hibernate性能提升
  8. OI群论:从入门到自闭
  9. 影像能力甩友商一条街 华为P40系列底气在这
  10. 获取程序进程并杀死该进程集
  11. Kernel那些事儿之内存管理(8) --- Slab(中)
  12. 关于8086七种寻址方式的练习
  13. element tree ui 全选_element UI tree 控件,点击父节点进行异步加载,异步加载的数据不能全选...
  14. 当驾校学员遇上微信小程序
  15. 通过IP地址进行精准定位
  16. ensp的下载与安装教程
  17. 联想Win10安装Ubuntu双系统教程
  18. 【渝粤教育】电大中专新媒体营销实务 (8)作业 题库
  19. TweenMax说明
  20. HBase 数据库检索性能优化策略

热门文章

  1. 64位win10系统无法安装.Net framework3.5的两种解决方法
  2. 资源大集中 浪潮I9000刀片为国家税务总局打造全能型平台
  3. Codeforces Gym 100286I iSharp 水题
  4. HBase基础和伪分布式安装配置
  5. 【NOIP模拟题】“与”(位运算)
  6. 终生受用的十大经典管理理论
  7. 《精通正则表达式》笔记
  8. python 面向对象实现CNN(四)
  9. 基于Html5的移动端开发框架的研究
  10. sql server 2008学习11 UDF用户自定义函数