javascript正则表达式分组捕获理解
我们先来看一段js代码:
var rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/;
console.log(rquickExpr.exec('#div'));//["#div", undefined, "div", index: 0, input: "#div"]
console.log(rquickExpr.exec('<li>'));//["<li>", "<li>", undefined, index: 0, input: "<li>"]
解释: (?:(<[\w\W]+>)[^>]*|#([\w-]*)) 中的 (<[\w\W]+>)[^>]* 或者 #([\w-]*) 是不捕获的。
有三个提示捕获的地方:
1. ^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$ 这个最长的。
2.(?:(<[\w\W]+>)[^>]*|#([\w-]*)) 中的 (<[\w\W]+>) 是捕获的, 所以 能捕获到,就是捕获的结果,不能捕获到就是 undefined.
3.(?:(<[\w\W]+>)[^>]*|#([\w-]*)) 中的 ([\w-]*) 是捕获的, 所以 能捕获到,就是捕获的结果,不能捕获到就是 undefined.
第一个:rquickExpr.exec('#div')。
1. 能匹配: ^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$,所以第一个是 #div
2.不能匹配 :(<[\w\W]+>)[^>]* ,所以 (<[\w\W]+>) 这个捕获是 undefined.
3.能匹配:#([\w-]*), 所以 ([\w-]*) 这个捕获是 div
合起来就是 : ["#div", undefined, "div"]
第二个:rquickExpr.exec('<li>')。
1. 能匹配: ^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$,所以第一个是 <li>
2.能匹配 :(<[\w\W]+>)[^>]* ,所以 (<[\w\W]+>) 这个捕获是 <li>.
3.不能匹配:#([\w-]*), 所以 ([\w-]*) 这个捕获是 undefined.
合起来就是 : ["<li>", "<li>",undefined]
javascript正则表达式分组捕获理解的更多相关文章
- JavaScript正则表达式-非捕获性分组
非捕获性分组定义子表达式可以作为整体被修饰但是子表达式匹配结果不会被存储. 非捕获性分组通过将子表达式放在"?:"符号后. str = "img1.jpg,img2.jp ...
- JavaScript:正则表达式 分组2
继续上一篇的写,这篇复杂点. 分组+范围 var reg=/([abcd]bc)/g; var str="abcd bbcd cbcd dbcd"; console.log(str ...
- JavaScript:正则表达式 分组
在现在的我看来,带小挂号的就是分组,嗯. 代码: var reg=/(abc)/; var str="abcdabcdeabcdef"; console.dir(reg.exec( ...
- 温故知新 javascript 正则表达式
很长时间没看 正则表达式了,碰巧今天用到,温故知新了一把 看书学习吧 50% 的举一反三练习中的原创. 一 javascript正则表达式的基本知识 1 javascript 正则对象创建 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈
摘要: 本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈. 一.俘获分组 1.1 准 ...
- JavaScript 正则表达式——预定义类,边界,量词,贪婪模式,非贪婪模式,分组,前瞻
㈠预定义类 示例:匹配一个ab+数字+任意字符的字符串:ab\d. ㈡边界 正则表达式常用的边界匹配字符 ⑴示例1:第一个是没写单词边界 第二个是加上字符边界的效 ...
- JavaScript 正则表达式上——基本语法
定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- JS正则表达式---分组
JS正则表达式---分组 之前写了一篇关于正则新手入门的文章,本以为对正则表达式相对比较了解 但是今天我又遇到了一个坑,可能是自己不够细心的原因吧,今天就着重和大家分享一下javascript正则表达 ...
- JavaScript 正则表达式基础语法
前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...
随机推荐
- mvc项目远程发布到windows server服务器
1.安装IIS的时候需要将这两个选项勾选起来 2.确保 管理服务委派 这个选项存在 3.添加委派规则 4.配置IIS管理用户,后续需要用这个用户进行发布连接 5.配置站点的IIS权限 选择刚才在前面设 ...
- update_engine-整体结构(二)
在update_engine-整体结构(一)中分析UpdateEngineDaemon::OnInit()的整体情况.下面先分析在该方法中涉及的DaemonStateAndroid和BinderUpd ...
- GRE配置教程——华为设备
GRE隧道是通过隧道两端的Tunnel接口建立的,所以需要在隧道两端的设备上分别配置Tunnel接口.对于GRE的Tunnel接口,需要指定其协议类型为GRE.源地址或源接口.目的地址和Tunnel接 ...
- net use远程重启服务器
在命令行工具中分别输入如下3条命令 net use \\10.10.1.100\ipc$ Password /user:Username shutdown -f -r -m \\10.10.1.1 ...
- Web高级 Eventloop和事件执行顺序
1. EventLoop 1.1 调用栈 当一个方法执行时内部调用另外的方法,则会形成调用栈,如图: 1.2 任务队列 JavaScript有一个主线程执行当前任务,主线程的代码同步执行,并把遇到的事 ...
- JavaScript 对象属性底层原理
对象属性类型 1. 数据属性 [[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,特性默认值为true [[Enum ...
- 根据导出的查询结果拼接字符串,生成sql语句并保存到txt文件中
import os os.chdir("C:/") path = os.getcwd() print(path) f = open("sql.csv") # p ...
- promise规范之部分总结
1. promise构造函数中的reject和resolve是微任务, 即先执行resolve后的代码,再执行之前通过then注册的代码 2. 对于状态已变更的promise来说,比如promiseA ...
- YUV介绍
YUV444与YUV422下采样. 一.YUV介绍 YUV有三个分量:Y(Luminance/Luma:亮度).U和V表示色差,体现的是图片的色彩信息.相对于RGB彩色空间,将亮度信息和色彩信息分离. ...
- 刘志梅201771010115.《面向对象程序设计(java)》第十七周学习总结
实验十七 线程同步控制 实验时间 2018-12-10 1.实验理论知识 多线程 多线程是进程执行过程中产生的多条执行线索.进程 线程是比进程执行更小的单位.线程不能独立存在,必须存在于 ...