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中的正则表达式作为相当 ...
随机推荐
- 收藏品:MP3播放器
大三下学期的时候,有一段生活激情似火. 那时候,我在外边接了项目,把宿舍的哥们儿都组织了起来,一起开发赚钱.我们在小区里租了房子,又多借了一台电脑,哥几个轮流上阵写代码.准备考研的兄弟也帮手做饭,我和 ...
- 编辑器-vim
编辑器之神-vim vi简介 vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样.它可以执行输出.删除.查找.替换.块操作等众多文本操作,而且用户 ...
- HTML 块级元素 行内元素
块级元素 - block level element 总是在新行上开始: 高度,行高以及外边距和内边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度: 它可以容纳内联元素和其他块元素 如: ...
- Asynchronous programming in javascript
Javascript是单线程的,因此异步编程对其尤为重要. ES 6以前: * 回调函数* 事件监听(事件发布/订阅)* Promise对象 ES 6: * Generator函数(协程corouti ...
- centos7 Ruby环境变量配置
ruby安装参考博客:https://blog.csdn.net/yelllowcong/article/details/78362370 (Redis之集群redis-trib.rb环境的搭建-y ...
- IDEA汉化
1.- 汉化包 提取码: 4mbq 2.打开IDEA,执行下列操作:在主界面选择File → Settings → Appearance&Behavior → Appearance → 勾选O ...
- Java程序的第一次作业
- 最长重复字符串题解 golang
最长重复字符串题解 package main import ( "fmt" "strings" ) type Index map[int]int type Co ...
- Java 中 Equals和==的区别(转)
另外一篇参考: https://blog.csdn.net/striverli/article/details/52997927 在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的 ...
- Virtualbox扩容C盘
oracle vm virtualbox虚拟机里面系统盘C盘容量不够,需要扩容,步骤如下: 1.使用命令更改当前虚拟机的文件大小 VBoxManage.exe modifyhd YOUR_HARD_D ...