返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js正则表达式之前瞻后顾与非捕获分组
  • 414
分享到

js正则表达式之前瞻后顾与非捕获分组

2024-04-02 19:04:59 414人浏览 薄情痞子
摘要

目录前瞻后顾与捕获分组的结合使用捕获分组与非捕获分组前瞻、后顾与负前瞻、负后顾总结前瞻后顾与捕获分组的结合使用 在现实的应用场景中,捕获分组或非捕获分组通常被限制在前瞻后顾条件内,

前瞻后顾与捕获分组的结合使用

在现实的应用场景中,捕获分组或非捕获分组通常被限制在前瞻后顾条件内,举例来说,对数字12345678格式化,结果为12,345,678。其正则实现如下:


let fORMatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

捕获分组与非捕获分组

为了理解前瞻与后顾,首先要先理解捕获分组与非捕获分组

js中,

()表示捕获分组,() 会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容);

(?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来。

以formatSum 表达式为例,(?=(?:\d{3})+(?!\d)) ,(?:\d{3}) ,(?!\d) 都是分组,其中第二个分组是非捕获分组。

前瞻、后顾与负前瞻、负后顾

在上述的formatSum表达式中,用到了 ‘?=‘与'?!',这就是所谓的前瞻与负前瞻了。为了方便理解,我们以一个简单的例子入手。


// 前瞻:
A(?=B)   //查找B前面的A
// 后顾:
(?<=B)A   //查找B后面的A
// 负前瞻:
A(?!B)   //查找后面不是B的A
// 负后顾:
(?<!B)A   //查找前面不是B的A

回看formatSum表达式,将 (?:\d{3})+(?!\d) 视为一个整体表达式 A,即


formatSum = /\B(?=A)/g  //此处A为表示式并非真正字母A,只为方便理解

其意思是匹配表达式A前面的 \B ,而 \B 匹配的是非字母边界,所以可以看出该表达式整体的作用是用来匹配并替换表达式 A 前边的边界的。

与 \B 对应的还有 \b ,其匹配字母边界。对于初学者来说,边界的概念比较难以理解,你可以把它看作是无形的 | ,任何长度大于等于2的字符串中都存在边界。如 ‘ab',它可以看作是'a|b', 只是此处 | 是无形的,当然它也就不计入字符串长度。


'ab'.replace(/\B/, ',')
//  a,b

接下来为了看表达式 A 部分: (?:\d{3})+(?!\d) 。

首先 ?: 表示非捕获分组,\d{3} 表示3位数字,则 (?:\d{3})+ 表示3、6、9、12…位数字;

(?!\d) 为负前瞻,表示匹配后面不是数字的 (?:\d{3})+ 。综上:


(?:\d{3})+(?!\d)  

匹配'12345678'中后面不是数字的3*n(n=1递增)位数字,即'678', '345678'

所以,得出结果:


formatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

匹配'12345678'中后面不是数字的3*n(n=1,n++)位数字前面的非字母边界,
即'678', '345678'前面的非字母边界,最终将这两个边界替换为逗号,
即 '3' 与 '6' 前加逗号


'12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')  === '12,345,678'
// true

总结

到此这篇关于js正则表达式之前瞻后顾与非捕获分组的文章就介绍到这了,更多相关js正则前瞻后顾与非捕获分组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: js正则表达式之前瞻后顾与非捕获分组

本文链接: https://lsjlt.com/news/154467.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • js正则表达式之前瞻后顾与非捕获分组
    目录前瞻后顾与捕获分组的结合使用捕获分组与非捕获分组前瞻、后顾与负前瞻、负后顾总结前瞻后顾与捕获分组的结合使用 在现实的应用场景中,捕获分组或非捕获分组通常被限制在前瞻后顾条件内,...
    99+
    2024-04-02
  • JavaScript正则表达式之非捕获性分组的示例分析
    这篇文章主要介绍了JavaScript正则表达式之非捕获性分组的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。非捕获性分组定义子表达...
    99+
    2024-04-02
  • 怎么理解Java正则表达式捕获组
    这篇文章主要讲解了“怎么理解Java正则表达式捕获组”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java正则表达式捕获组”吧!undefined普通捕获组(Expression)命...
    99+
    2023-06-02
  • Python正则表达式教程之二:捕获篇
    前言 在上一篇文中,我们介绍了关于Python正则表达式的基础,那么在这一篇文章里,我们将总结一下正则表达式关于捕获的用法。下面话不多说,来看看详细的介绍吧。 捕获 捕获和分组在正则表达式中有着密切的...
    99+
    2022-06-04
    之二 教程 正则表达式
  • 用于捕获 Go 中可选存在的组的正则表达式
    php小编百草为您介绍一种用于捕获 Go 中可选存在的组的正则表达式。在Go中,正则表达式是一种强大的工具,可以用来进行字符串匹配和提取。当我们需要匹配一个可选存在的组时,可以使用问号...
    99+
    2024-02-09
  • Java正则表达式之分组和替换方式
    目录1 正则表达式热身匹配电话号码匹配邮箱特殊字符替换2 分组3 分组替换4 反向引用5 反向引用替换正则表达式的子表达式(分组)不是很好懂,但却是很强大的文本处理工具。 1 正则表...
    99+
    2024-04-02
  • 正则表达式分组与引用的使用
    目录0.写在前面1.分组与编号2.不保存子组3.分组引用4.查找与替换 查找替换5.在文本编辑器中使用查找替换6.写在最后0.写在前面 今天我们来讲下正则中的分组与引用,其...
    99+
    2024-04-02
  • 正则表达式高级用法之分组的使用教程
    目录分组的使用场景分组的使用方法捕获组分组的使用实例javascript 获取分组内容java 获取分组内容小结补充:正则表达式分组及常见的方法总结分组的使用场景 在书写正则表达式时...
    99+
    2024-04-02
  • JS之正则表达式懒惰性和贪婪性的示例分析
    这篇文章主要为大家展示了“JS之正则表达式懒惰性和贪婪性的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS之正则表达式懒惰性和贪婪性的示例分析”这篇文...
    99+
    2024-04-02
  • PHP正则表达式之如何分割字符串与转义字符串
    这篇文章主要介绍“PHP正则表达式之如何分割字符串与转义字符串”,在日常操作中,相信很多人在PHP正则表达式之如何分割字符串与转义字符串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP正则表达式之如何分割...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作