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中的正则表达式作为相当 ...
随机推荐
- 嵌入式GCC笔记
GNU C Complier 查看 gcc 版本 :gcc -v 文件后缀名 .c的后缀 为C语言的文件源码 gcc -o output gcc -o 输出文件名字 输入文件名 gcc -v -o ...
- MQTT研究之EMQ:【wireshark抓包分析】
基于上篇博文[SSL双向验证]的环境基础,进行消息的具体梳理. 环境基础信息: . 单台Linux CentOS7.2系统,安装一个EMQTTD的实例broker. . emq的版本2.3.11. . ...
- (转)InnoDB与MyISAM引擎区别
MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比 2015年06月25日 21:58:42 阅读数:1827更多 个人分类: mysql 1.MyISAM:默认表类型,它是基于传统 ...
- 黄聪:原生js的音频播放器,兼容pc端和移动端(原创)
更新时间:2018/9/3 下午1:32:54 更新说明:添加音乐的loop设置和ended事件监听 loop为ture的时候不执行ended事件 1 2 3 4 5 6 7 8 9 10 11 12 ...
- Android memory dump
1.读取指定pid和内存地址的字符: #include <stdlib.h> #include <stdio.h> #include <string.h> #inc ...
- TCP/IP学习20180710-数据链路层-ICMP协议
1.ICMP协议IP协议不保证数据送达.则应有协议保证数据送达.ICMP就是其中的重要协议.ICMP:(Internet Control Messages Protocol)因特网信报控制协议当传送I ...
- MFC 单文档调用对话框
1.插入新的Dialog,如下图: 2.修改ID位 IDD_XMB 3.在单文件的Menu 中选中需要链接的按键,右键添加处理程序,如下图所示,添加完成后,在项目的xxxview.cpp中会生成如下函 ...
- css中,在高度已知,写出三栏布局,其中左栏、右栏宽度各位300px,中间自适应
解决方案主要有五种 首先写入全局样式 <style type="text/css"> html * { margin: ; padding: ; } .layout { ...
- 2、Netty基础
一.前言 主要包含下面内容: 初识 Netty: 使用 Java NIO 搭建简单的客户端与服务端实现网络通讯: 使用 Netty 搭建简单的客户端与服务端实现网络通讯: Netty 底层操作与 Ja ...
- Wow64(32位进程)注入DLL到64位进程
转载自: https://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/ 向其他进程注入DLL通常的做法是通过调用CreateR ...