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);//""
这里的正向预查,属于零宽断言,也是正向前瞻。
正向前瞻用来检查接下来的出现的是不是某个特定的字符集。而负向前瞻则是检查接下来的不应该出现的特定字符串集。零宽断言是不会被捕获的。
不过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
还有一些资料:
转载于:https://www.cnblogs.com/dh-dh/p/5261044.html
javascript正则表达式---正向预查相关推荐
- php正则表达式正向预查,javascript正则表达式-----正向预查
前几篇有用到过, 但是未做深入学习,发现一篇很好的博文 转载自 javascript--正向预查 什么是正向预查?这里有腾讯招聘的一个例子: 如何给一串数字用千分制表示?比如9999999999变成9 ...
- 正则表达式: 正向预查和负向预查
(?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用.这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用.例 ...
- 经典JavaScript正则表达式实战
来源:http://www.cainiao8.com/web/js_note/js_regular_expression_blueidea.html 目录 1. 正则表达式实战...1 2. 匹 ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- javascript正则表达式复习
javascript的正则表达式复习 参考资源: w3cschool javascript regexp 菜鸟吧 javascript正则表达式 这里主要记录几个自己之前不是很熟悉的知识点,其他的知识 ...
- javascript正则表达式-姜威-专题视频课程
javascript正则表达式-2824人已学习 课程介绍 本课程以 javascript 程序为基础,主讲在js中正则的用法,课程内提供测试环境,所有规则简单易懂,围绕着js的相关函 ...
- javascript正则表达式一
正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式 ...
- JavaScript正则表达式的个人笔记
正则表达式 一.正则表达式创建 1.`var reg = /test/;` 2.`var reg = new RegExp('test');` 3.正则表达式的exec方法 二.正则表达式模式 1.一 ...
- ruby 正则表达式 使用正负预查
例1:如果字符串New World后是Symphony 或 Dictionary 字符串New World将匹配, 但第三个单词不是匹配内容的一部分: s1="New World Dicti ...
- JavaScript 正则表达式 处理json,json对象的遍历和处理
//********* https://www.runoob.com/js/js-regexp.html ****// 正则表达式.exec( ) new RegExp("\\{" ...
最新文章
- JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
- 网络推广外包——网络推广外包指出新站上线前一定要做好自我检测
- P4027-[NOI2007]货币兑换【斜率优化dp,CDQ分治】
- mysql int tinyint_MySQL中int(M)和tinyint(M)数值类型中M值的意义
- mysql8.0.17压缩包安装教程_mysql 8.0.17 解压版安装配置方法图文教程
- SpringBoot(三) SpringBoot中的日志配置
- 脚本自动化互相阅读文章教程
- 用Hexo制作自己的静态博客
- Windows 命令行cmd破解WiFi密码
- Toplitz矩阵 Hankel矩阵 Hilbert矩阵
- python中字典的定义和操作
- 《资本之王》书中的精髓:黑石公司是如何成长为全球最顶尖的私募股权投资机构的?
- R语言sparse.model.matrix函数报错
- JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
- IOS视频开发之MPMoviePlayerController
- 学计算机的发说说,计算机说说
- 数字图像处理学习路线大体介绍
- (10月25日)云服务器搭建青龙面板保姆级教程
- 使用webcollector爬虫技术获取网易云音乐全部歌曲
- 3D坐标系中 点 的 平移、旋转和缩放