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

如何给一串数字用千分制表示?比如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正则表达式---正向预查相关推荐

  1. php正则表达式正向预查,javascript正则表达式-----正向预查

    前几篇有用到过, 但是未做深入学习,发现一篇很好的博文 转载自 javascript--正向预查 什么是正向预查?这里有腾讯招聘的一个例子: 如何给一串数字用千分制表示?比如9999999999变成9 ...

  2. 正则表达式: 正向预查和负向预查

    (?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用.这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用.例 ...

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

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

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

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

  5. javascript正则表达式复习

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

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

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

  7. javascript正则表达式一

    正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式 ...

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

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

  9. ruby 正则表达式 使用正负预查

    例1:如果字符串New World后是Symphony 或 Dictionary 字符串New World将匹配, 但第三个单词不是匹配内容的一部分: s1="New World Dicti ...

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

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

最新文章

  1. JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
  2. 网络推广外包——网络推广外包指出新站上线前一定要做好自我检测
  3. P4027-[NOI2007]货币兑换【斜率优化dp,CDQ分治】
  4. mysql int tinyint_MySQL中int(M)和tinyint(M)数值类型中M值的意义
  5. mysql8.0.17压缩包安装教程_mysql 8.0.17 解压版安装配置方法图文教程
  6. SpringBoot(三) SpringBoot中的日志配置
  7. 脚本自动化互相阅读文章教程
  8. 用Hexo制作自己的静态博客
  9. Windows 命令行cmd破解WiFi密码
  10. Toplitz矩阵 Hankel矩阵 Hilbert矩阵
  11. python中字典的定义和操作
  12. 《资本之王》书中的精髓:黑石公司是如何成长为全球最顶尖的私募股权投资机构的?
  13. R语言sparse.model.matrix函数报错
  14. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
  15. IOS视频开发之MPMoviePlayerController
  16. 学计算机的发说说,计算机说说
  17. 数字图像处理学习路线大体介绍
  18. (10月25日)云服务器搭建青龙面板保姆级教程
  19. 使用webcollector爬虫技术获取网易云音乐全部歌曲
  20. 3D坐标系中 点 的 平移、旋转和缩放

热门文章

  1. 弹出框、遮罩层demo
  2. Laravel nginx 伪静态规则
  3. winform基础,主要控件简单介绍,以及小练习
  4. Python开发Day07(学生选课)
  5. Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
  6. 调整Excel的打印线
  7. POJ 1155 TELE 树形DP
  8. vim的学习笔记(3)
  9. SEO知识分享一,选择关键词
  10. 错过了蓝月亮,你还有我们~~只此一次!