php正则表达式正向预查,javascript正则表达式-----正向预查
前几篇有用到过, 但是未做深入学习,发现一篇很好的博文
转载自 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正则表达式-----正向预查相关推荐
- 正则表达式入门教程经典Javascript正则表达式(share)
前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...
- 经典JavaScript正则表达式实战
来源:http://www.cainiao8.com/web/js_note/js_regular_expression_blueidea.html 目录 1. 正则表达式实战...1 2. 匹 ...
- javascript正则表达式复习
javascript的正则表达式复习 参考资源: w3cschool javascript regexp 菜鸟吧 javascript正则表达式 这里主要记录几个自己之前不是很熟悉的知识点,其他的知识 ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- javascript正则表达式-姜威-专题视频课程
javascript正则表达式-2824人已学习 课程介绍 本课程以 javascript 程序为基础,主讲在js中正则的用法,课程内提供测试环境,所有规则简单易懂,围绕着js的相关函 ...
- JavaScript 正则表达式 处理json,json对象的遍历和处理
//********* https://www.runoob.com/js/js-regexp.html ****// 正则表达式.exec( ) new RegExp("\\{" ...
- javascript 正则表达式 幽灵的礼物
javascript 正则表达式 好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的 ...
- JavaScript正则表达式的个人笔记
正则表达式 一.正则表达式创建 1.`var reg = /test/;` 2.`var reg = new RegExp('test');` 3.正则表达式的exec方法 二.正则表达式模式 1.一 ...
- JavaScript正则表达式快速判断技巧
原文:JavaScript正则表达式快速判断技巧 这里是JS的正则的一点心得,并不是最完整的规则汇总,更侧重实际运用中的快速判断,初学者接触正则之后往往会被一堆星号括号给弄晕,有了一些速判技巧就能从整 ...
最新文章
- 《C语言及程序设计》实践参考——当年第几天
- PXE批量部署linux操作系统
- java jsp setAttribute setParameter 区别
- 【原创】new和delete
- 云炬随笔20210714(1)
- linux安装tomcat_【零基础学云计算】详述Linux系统中Tomcat部署及优化
- Hibernate性能提升
- OI群论:从入门到自闭
- 影像能力甩友商一条街 华为P40系列底气在这
- 获取程序进程并杀死该进程集
- Kernel那些事儿之内存管理(8) --- Slab(中)
- 关于8086七种寻址方式的练习
- element tree ui 全选_element UI tree 控件,点击父节点进行异步加载,异步加载的数据不能全选...
- 当驾校学员遇上微信小程序
- 通过IP地址进行精准定位
- ensp的下载与安装教程
- 联想Win10安装Ubuntu双系统教程
- 【渝粤教育】电大中专新媒体营销实务 (8)作业 题库
- TweenMax说明
- HBase 数据库检索性能优化策略