前言:

环视就是断言

正则匹配是从前往后的,断言匹配的是位置,是"零宽"的

分类:

让我们看一个正则匹配,匹配带字符'o'的单词,在此基础上说明断言

let str = `hello world, I'm your brother`// 匹配带有字符o的单词console.log( str.match(/[a-z]{0,}o[a-z]{0,}/g) )
//=> ['hello', 'world', 'your', 'brother']

1、先行断言 (?=p)

匹配某个位置,其右边一定是p表达式

// 匹配字符o,右边一定是r或u
console.log( str.match(/[a-z]{0,}o(?=[ru])[a-z]{0,}/g) )
//=> ['world', 'your']// 匹配字符o,右边第二个字符一定是l
console.log( str.match(/[a-z]{0,}o(?=.l)[a-z]{0,}/g) )
//=> ['world']

2、先行反向断言(?!=p)

匹配某个位置,其右边一定不是p表达式

// 匹配字符o,右边一定不是r
console.log( str.match(/[a-z]{0,}o(?!r)[a-z]{0,}/g) )
//=>  ['hello', 'your', 'brother']

3、后行断言(?<=p)

匹配某个位置,其左边一定是p表达式

// 匹配字符o,左边一定是y
console.log( str.match(/[a-z]{0,}(?<=y)o[a-z]{0,}/g) )
//=>  ['your']

4、后行反向断言(?<!p)

匹配某个位置,其左边一定不是p表达式

注意:是?<!,不要写错了

// 匹配字符o,左边一定不是br
console.log( str.match(/[a-z]{0,}(?<!br)o[a-z]{0,}/g) )
//=>  ['hello', 'world', 'your']

注意:

零宽,不占位

'your'.match(/yo(?=[abu])/)
//=> ['yo', index: 0, input: 'your', groups: undefined]'your'.match(/yo[abu]/)
//=> ['you', index: 0, input: 'your', groups: undefined]

拓展:

分隔符_牛客题霸_牛客网

// 实现参数数字的千分位分隔符字符串
// 输入数字1234567,输出字符串'1,234,567'
// 输入数字-12345, 输出字符串'-12,345'
function comma(num){let str = num.toString()return str.replace(/(\d)(?=(\d{3})+$)/g, '$1,')// $1匹配的是第一个分组(\d)// (?=(\d{3})+$) 是先行断言,表示可以匹配到至少一个 \d{3} ,最后的位置一定是$
}
console.log( comma(1234567) ) //=> '1,234,567'
console.log( comma(-12345) ) //=> '-12,345'

参考链接:

3.断言(环视)、模式修饰符和使用字符串对象方法执行正则表达式_哔哩哔哩_bilibili

JS正则表达式完整版_Chafferer,迷心的博客-CSDN博客_js正则?=

JavaScript--环视相关推荐

  1. 深入理解正则表达式环视的概念与用法

    在<深入理解正则表达式高级教程-环视>中已经对环视做了简单的介绍,但是,可能还有一些读者比较迷惑,今天特意以专题的形式,深入探讨一下正则表达式的环视的概念与用法. 深入理解正则表达式环视的 ...

  2. javascript权威指南学习笔记

    一.数据类型: js中,所有的数字都是浮点型的. isNaN()/isFinite()     //检测数据类型 Infinity               //无穷大 Number.MAX_VAL ...

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

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

  4. 玩转JavaScript正则表达式

    Why Regular Expression 我们先来看看,我们干哈要学正则表达式这玩意儿: 复杂的字符串搜寻.替换工作,无法用简单的方式(类似借助标准库函数)达成. 能够帮助你进行各种字符串验证. ...

  5. 正则表达式的环视深度剖析

    文章目录 一.环视基础 二.顺序环视匹配过程 (一)顺序肯定环视匹配过程 (二)顺序否定环视匹配过程 三.逆序环视匹配过程 (一)逆序环视基础 (二)逆序肯定环视匹配过程 1. 逆序表达式的长度固定, ...

  6. JavaScript(JS)常用正则表达式汇总

    文章目录 自定义字符串校验函数 常用正则表达式 自定义字符串校验函数 校验字符串是否全由数字组成,是则返回true,否则返回false: function isDigit(str) {var regE ...

  7. php查找以xx结尾的的字符串单词,Javascript中查找不以XX字符结尾的单词示例代码_javascript技巧...

    首先,让我声明一下,我在写这篇文章之前花了2个多小时在弄正则表达式.悲~悲~悲~ 按照一般的思路,先来看看其他几个插找方式: 我以字符串 var str = "eattd gebcat ge ...

  8. [译]JavaScript的新功能将改变正则表达式的编写方式

    翻译:第一秩序 原文:www.smashingmagazine.com/2019/02/reg- 摘要:如果你曾用 JavaScript 做过复杂的文本处理和操作,那么你将会对 ES2018 中引入的 ...

  9. JavaScript正则式练习

    使用正则式匹配第一个数字和最后一个数字,使用环视 str2 = 09051 : Fast Food Restaurants - Concession Stands/Snack Bars Delicat ...

  10. 正则环视(零宽度断言)

    文章目录 前瞻(Lookahead ) 肯定式前瞻(positive lookahead ) 否定式前瞻(negative lookahead ) 后顾(Lookbehind ) 肯定式后顾(posi ...

最新文章

  1. JavaScript String 对象扩展方法
  2. goldengate源端意外宕机,传输进程终止,导致OGG-01031报错
  3. 快捷登录PHP,phpcms 微信快捷登陆
  4. 网络编程基础知识(待更新补充)
  5. file_put_contents记录的日志内容丢失
  6. 支持Delphi2009/2010的DES加密单元
  7. matlab机器人工具箱puma560模型学习
  8. 简述SSM框架与SSH框架
  9. 空间域和频域结合的图像增强技术及实现
  10. mysql in 子查询多个字段_SQL IN 子查询返回多对值
  11. 如何 接收消息服务器url,(读书笔记)网络是怎样连接的——浏览器生成消息...
  12. 计算机中丢失storm.d,win10 64位电脑缺少storm.dll怎么办_win10玩暗黑破坏神2缺少storm.dll文件修复方法...
  13. 马云对话马斯克:福报变成了一周工作12小时?
  14. PXE系列之一:PXE环境搭建
  15. 八、量子纠缠状态的纯化协议及其应用
  16. android手电筒功能吗,android通过led实现手电筒功能
  17. 阿里云【名师课堂】Java零基础入门24 ~ 26:方法的定义与使用
  18. 郴州市少儿机器人编_郴州市举办中小学机器人竞赛
  19. Ray:一个分布式应用框架
  20. C语言课设——学生体测系统

热门文章

  1. CUDA——Python基础与实现
  2. React:Redux和Flux
  3. 再理解:零空间、行空间、列空间、左零空间、基础解系、极大线性无关组、齐次解、非齐次解之间的关系
  4. socket系列之什么是socket
  5. sql——字符串处理
  6. Excel VBA 金融建模 培训
  7. drools入门-02
  8. 字节跳动最爱考的前端面试题:Node.js 基础
  9. 国内外知识图谱资源-国际(UMLS)
  10. 单片机C语言数据存储原理,学习单片机C语言,必知的数据存储与程序编写知识!...