深入理解JS正则表达式---分组


Posted in Javascript onJuly 18, 2016

深入理解JS正则表达式---分组

之前写了一篇关于正则新手入门的文章,本以为对正则表达式相对比较了解 但是今天我又遇到了一个坑,可能是自己不够细心的原因吧,今天就着重和大家分享一下javascript正则表达式中的分组。如果你对JS正则表达式不够理解 可以点击这里了解更多。

分组在正则中用的还是比较广的,我所理解的分组 就是一对括号() ,每一对括号 就代表了一个分组,分组可以分为:

•捕获性分组
•非捕获性分组

捕获性分组

捕获性分组会在 比如 match exec这样的函数中以第二项,第三项的形式得到相应分组的结果。先来看一个例子吧

var reg = /test(\d+)/;
 var str = 'new test001 test002';
 console.log(str.match(reg));//["test001", "001", index: 4, input: "new test001 test002"]

代码中 (\d+)是一个分组(有些人也叫他子模式),但是表示的都是同一个意思,上面的例子中 test001是完全匹配的结果,然而 分组的匹配是从整个完全匹配结果(也就是test001)中来查找与子模式\d+匹配的字符,这里显然是 001.但是今天遇到的情况是这样的

var reg = /test(\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));//["test001", "1", index: 4, input: "new test001 test002"]

不同之处就是 (\d+) 改为了 (\d)+ ,整个匹配结果还是 test001 但是第一个分组匹配的结果却不同。咱们慢慢来分析他们的区别

(\d+) 这整个是一个分组的情况,由于 默认情况下 匹配模式都是贪婪模式 也就是说尽可能多的去匹配所有\d+ 匹配到的结果 是 001 然后 外面添加了一对括号 也就是一个分组,这样第一个分组中匹配的结果就是 001.再来看第二个例子中的 (\d)+ 同样这也是一个贪婪模式 首先会先匹配0然后后面是0 也会匹配到 最后是1 同样也匹配到 到此 匹配结束看起来跟第一个例子中的匹配没什么区别,但是这里的 分组(\d)表示 匹配单个数字,按照我之前的理解是0 但这种理解是错误的。由于整个匹配是贪婪模式,尽可能多的去匹配分组中的 (\d) 就会捕获 最后一次匹配到的结果 1,如果是非贪婪模式 那就会尽可能少的去匹配

var reg = /test(\d)+?/;
 var str = 'new test001 test002';
 console.log(str.match(reg));//["test001", "0", index: 4, input: "new test001 test002"]

这样(\d)匹配结果就是0了,虽然后面还有能够匹配到的结果,但是这里是尽可能少的去匹配

非捕获性分组

非捕获性分组也就是 有些地方需要用到一对括号,但是又不想让他成为一个捕获性分组也就是不想让这个分组被类似 macth exec 这样的函数所获取到通常在括号内部的前面加上?: 也就是 (?:pattern)这样就变成了一个非捕获性分组,

var reg = /test(?:\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));//["test001", index: 4, input: "new test001 test002"]

这样 match的结果中就不会出现分组匹配到的内容了 也就是少了 第二项的 1.

这篇文章着重说明 (\d+)和 (\d)+的区别,也是我今天踩到的坑,若有错误之处,欢迎指正。

以上这篇深入理解JS正则表达式---分组就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 检测浏览器和操作系统的脚本
Dec 26 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
Mar 14 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
Javascript实现简单二级下拉菜单实例
Jun 15 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
Oct 08 Javascript
jquery div模态窗口的简单实例
May 28 Javascript
js判断浏览器是否支持严格模式的方法
Oct 04 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
Dec 28 Javascript
基于IView中on-change属性的使用详解
Mar 15 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 #Javascript
简单的JS轮播图代码
Jul 18 #Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
Jul 18 #Javascript
Bootstrap零基础学习第一课之模板
Jul 18 #Javascript
深入分析javascript中的错误处理机制
Jul 17 #Javascript
javascript正则表达式中分组详解
Jul 17 #Javascript
最佳的JavaScript错误处理实践
Jul 16 #Javascript
You might like
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
如何能分清npm cnpm npx nvm
2019/01/17 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
python自动裁剪图像代码分享
2017/11/25 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
python3.5绘制随机漫步图
2018/08/27 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
python中常见错误及解决方法
2020/06/21 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
pytorch简介
2020/11/11 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
技术总监管理职责范本
2014/03/06 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
公务员诚信承诺书
2014/05/26 职场文书
公司行政管理制度范本
2015/08/05 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers