RegExp子模式- "()"
读书笔记
把JavaScript权威指南拿出来瞅瞅,正巧看到了第十章 正则表达式的模式匹配
最初接触js的时候,基本上都是在做验证。什么数字验证、命名验证、身份证格式验证、电话号码验证。都是用正则表达式来完成,或者压根还不知道有一些插件和框架可以直接使用,但总归不是学习技术的路子。
刚巧碰上一个关键词想记下来“子模式”
这边用一个原书的例子:
Function.prototype.getName=function(){
if(this.name) return this.name; // 非标准
// 利用正则表达式中的([^\(])*子模式抽离出function后非(的字符串
return this.name=this.toString().match(/function\s+([^\(])*\(/)[1]; // this.toString().match(/function\s*([^\(])*\(/)返回的是['function test(','test']
};
function test(){}
test.getName(); // 返回test
/function\s*([^\(])*\(/ 正则表达式中圆括号里面属于一个子模式,也就是match返回的结果中有单独检测出符合子模式中正则表达式的结果,是以function开头且至少存在一个空格符号后跟随的非‘(’字符,看着可能很绕口。再用一个比较简单的例子来理解
console.log('abc'.match(/ab*/)); // ['ab']
console.log('abc'.match(/a(b)*/)); // ['ab','b'] // 加了子模式后,把子模式的部分抽离出来,b就属于括号内的子模式匹配
aaarticlea/png;base64,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" alt="" />
子模式除了可以抽离出我们想要的数据外,还可以作为文本引用表示同一个模式匹配,原书中用了单引号和双引号中内容匹配来说明
"a'cdef\"a'b".match(/['"][^'"]*['"]/); // ["'cdef""] 两侧的引号不匹配
"a'cdefa\"'b".match(/(['"])[^'"]*\1/); // null
"a'cdefa'b".match(/(['"])[^'"]*\1/); // ["'cdefa'", "'"] 两侧引号匹配
"a'cd\"efa'b".match(/(['"])[^\1]*\1/); // ["'cd"efa'", "'"] 这种写法是错的,匹配出来的结果中单引号里面包含了单个双引号
在这边用到子模式引用所达到的效果就是前后2个引号是相互匹配的,只会匹配出双引号或单引号括起来的内容,而不会出现由单引号和双引号混合括起来的内容被匹配。“ ’ ab“ ”就无法匹配,必须是"'ab'",或者是'"ab"'。
RegExp子模式- "()"的更多相关文章
- PHP正则表达式的逆向引用与子模式 php preg_replace应用
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) 功能 在 subject 中搜索 ...
- Javascript的RegExp对象(转载自网络)
正则表达式是一个描述字符模式的对象. JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. '***************** ...
- ruby 正则表达式Regexp
ruby正则表达式在线编辑器:rubular 一般规则: /a/匹配字符a. /\?/匹配特殊字符?.特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), + ...
- RegExp类型
一.创建正则表达式的方法 1.字面量形式 var expressiion=/pattern/flags; flags:g全局模式,即将被应用于所有字符串,而非在发现第一个匹配项时立即停止: i不区分大 ...
- IteratorPattern(迭代子模式)
/** * 迭代子模式 * @author TMAC-J * 聚合:某一类对象的集合 * 迭代:行为方式,用来处理聚合 * 是一种行为模式,用于将聚合本身和操作聚合的行为分离 * Java中的COLL ...
- JavaScript RegExp 基础详谈
前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究.学习.掌握,而是抱着需要的时 ...
- javascript正则表达式(RegExp)简述
首先我们来思考以下两个个场景 我们使用window操作系统,有时候需要找一个文件,刚刚好这个文件我不知道放哪里去了,这个时候我们该怎么办呢? 我们使用word写论文的时候,不小心将"订价&q ...
- 正则-RegExp()构造函数
上次写了js正则的字面量声明,今天说说RegExp()构造函数声明: var p=/cat/g; //字面量声明var p=new RegExp('cat','g') //构造函数声明 它两所表达 ...
- REGEXP 正则的实现两个字符串组的匹配。(regexp)
主要懂3个mysql的方法:replace[替换] regexp[正则匹配] concat[连接] 由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中.比如 ...
随机推荐
- string的一些操作,类似数组
1.串的切割 var a="hello world";//a.length=11 alert(a.slice(3)); alert(a.substring(3)); alert(a ...
- 一个简单C程序的汇编代码分析
几个重要的寄存器 eip - 用于存放当前所执行的指令地址 esp - 栈(顶)指针寄存器 ebp - 基址(栈底)指针寄存器 简单的C程序 int g(int x) { ; } int f(int ...
- django settings最佳配置
# encoding=utf-8 import os import socket SITE_ID = 1 # 项目的根目录 # 简化后面的操作 PROJECT_ROOT = os.path.dirna ...
- .a静态库的注意事项
.a静态库 生成的时候 可以分为 debug 版本 和 release 版本. debug:速度比较慢,比较耗性能.会启动更多的 Xcode 系统监控功能. 对错误的敏感度不高. re ...
- Ubuntu常用命令速查手册-珍藏版-完整版
sudo apt-get install 软件名 安装软件命令 sudo nautilus 打开文件(有root权限) su root 切换到“root” ls 列出当前目录文件(不包括隐含文件) l ...
- lua好久没有用了
lua好久没有用了, 最近用python有点多,现在用web.py搞个简单的页面来作通讯录,没美工,很纯白的, 无聊啊,准备去睡了,刚刚百度完lua的一些资料呢, google用不了,真悲剧啊, TM ...
- 自定义DTD(myeclipser的XML提示功能)
了解DTD定义详见:http://www.w3school.com.cn/dtd/dtd_elements.asp PS:文本只是简单的介绍,启到抛砖引玉的作用. 1.创建DTD文件 <?xml ...
- 开始使用Logstash
开始使用Logstash 本节将指导处理安装Logstash 和确认一切是运行正常的, 后来的章节处理增加负载的配置来处理选择的使用案例. 这个章节包含下面的主题: Installing Logsta ...
- auto space advisor
<pre name="code" class="sql">首先:oracle有自动Job,进行shrink space SQL> select ...
- DateTime字段控件值显示短格式的做法
后台取dateTime格式,前台格式化就好了 <input type="text" name="txtPartyTime" id="txtPar ...