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,iVBORw0KGgoAAAANSUhEUgAAAccAAAA6CAIAAABK5QWWAAAH9ElEQVR4nO2d24reNhDH9UZ6Ij2QXiTXgqa9KLkITQttthACgnQXciptSClNUzbNftAs0wvZsjwjS/Zn+Tvs/n+EsHi9mtHpr/H4IPUCAABAOxQBAABoB1QVAABaAlUFAICWQFUBAKAlUFUAAGgJVDXBk3VEnrQit66ctSWss27Htp1Z60wowVp2lKxfV+654Sx5ImdI2/rJpXJWl7DKuqVRv3kyZWfEiArw8VAswdjMgFlQwllxHqq6uPX3mvBGd6PN27UytL6EvYm1iKwfu10JjmuB1cdbPFKWd/cebeItmb62zZr04KS1iEfKnShHVIcYDwWjwQQfMLNLOC8SVRVLFo9xqmvaBnhLSpEyC/7EKFJq8TSLHe9tpaedqfhTLWEmhYk35YOcIVNzJl+CJy0OpiXI0o4ebizt7j1GVCDW1JQvRDzpmj+VEmZSWEumfZD9Ve7B2OPZASPHgzMZu6kJZu6I8cd2jGJVb3nDmXHfyBMOg1lo1NvFqrrIxFJ/9iEncFUf5MGCq+xXISSxlkcQo9OqS+8x2Lq7l5rYw589yOpX2Qd5sOpq2lCZRkvGQ4iCg0qmMSkzcQqx2taIDIDjumn1uN3FCSldIBC12JNWQ2gQlrsQXHSXIfEElSyJIvpIu5ObmHBj+O3Yh9RE6mepa0UJhtWij5hmLjlWd9a17ivOTDjhoTAhfcjUwpXagZfgSWtybOEUARGbWnxaFoeHrMWouz1pRSYc6a864wmd0ItaSB/m9EVaCz7kkjGZ+llYPFgJ3vJazBm0SXGj4REqzkzEIRQ9ZCakD9lapJFjZuqNR1RmyImWNJbMWDFkcFoeUVxwzpBcXtWNeoKIrB7nYsQJHTG86jsjLlkxm2N6EQkn8Pg/iZLSbM7Q7kk3F65c0p7L+NArV0mPUqf6sRiLildwwckYNcwM3OKqbn33J9IEifHKTLCWzNbCmsyMmqpFVrDSEqRXtDAu47UQ3R2TJ4O3E5ncND+Y+jB0QTHZOtQi50OnXLnWyxCbvS8q1qJzUsyLKsETY/o/ESZYraUJ2ZKZWmSnQHqlwlSVDZjwc2F9Yiak26KEu0FGVau3eiflTLSgVEMjhle6+uWnx3gOxCAur+zEy5E+xL5PnS13rRkH1PHkMMml9JSRqipNMJcm1U1EE4kZfuu2XIs0A6BMvoSVGQBWC9nd8UgstgvB+r7Orq9sEY0jxEx7ZpIQjw+5fnVJ0yDlxSPGiVFMu5ODQol5UYWrqjDBXZoWr7SD+MW45d2hRMWzGYBh7Z/OAHTWLR+39zEDUL3eL8XnSSrQue7kfJwYBa5v9C6KWRKrFqjEqjk5LqhDXKKHKC9eRI9jVfLkZuirVFVpgkQUwExkVbUQmFRrEUrTY6PVe1+L7lbxWkzHiVHgbMxOmJHz9Vi1SDlWzYjg9MAbbk46rqo8Vu3nRd29sapKE8QkUpjIqmrhyiZrgv25HDCVu1W5Rrtnd6vEfUN+12/Gzc0YBvK0qRl+a1wXUFg/LI8yjxbHpRpHWMORfpqxG+4xIstn4jw51x9hiY6JaTOk9nT3J9EEz8RNhM/MSau7/LI2pBVpmzFBfdjFW7LXcdaSshasOvVaSLf3mBLlvKpoKJlXVZq8G/orOpkdUSS7m9XL8YsSOaLYkHNODOOpyopKadWtlzItWwqfmZOOVJ9fDv87YSKeJluy03HRkqwWvDpZE0Q0fviBDZiZzw8UjmTG2N3Mq9515DwM5IOUcyMNhFeWwzM/cx42PP8LOim7kcknN8+KIRCex9S8qD6tzE3Me975FJ4qWcl9VFUAANgOqCoAALQEqgoAAC2BqgIAQEvUsbd4AQCAOwViVQAAaAlUFQAAWgJVBQCAlkBVAQCgJVBVAABoSRNV9VarDi3ek3SGjFvy9fP+M5/idUhneivqDrxZCgC4m2RU9dHFlX3wWP57dHE1UYi3ekroPGmz7AX78NGb6TeuC8YAAODo5L6v+uBx9tSp4yWhC1/6K3yQlX/BwpN15a+DQVUBAKdMXlVvb7+Ef0qp29svt7f/7Xb/7qOqVZZ/oAaqCgA4ZfKqutvd7HY3u91npdRu9/n6+sMf7960UdX4rfb4bctue525HyaDqgIATpm8qt7cXKsxv729bKGqbthKJfwQ7mVRbcfIvYwBAMDhyavqp0//XF///fHjn0qpD3+9f//767cvfZtYlX0VPd2faF4JUFUAwCmTV9X3717/+urFq6vnSqmXvzy79E9fPP+hgarGyDSNVWMqALEqAOD8yavqpf/p2Y/fXjz5+uLJw4snD59+99XP33/TJgOQ7nQeNsPL7nYyDVQVAHDKtHtedeotgHbgLQAAwOmDN1YBAKAlUFUAAGgJVBUAAFoCVQUAgJZAVQEAoCXYDRAAAFqCWBUAAFoCVQUAgJZAVQEAoCVQVQAAaAlUFQAAWrL9dwDa7QY4SdXE1AkH+oABAOAesfG+VRvsBrjcRPUEZ6CqAIBGbLxv1Qa7AVZMWM2D3IoPBFUFADTk4PtWMZbvBljDk5mdOohOQFUBAI048L5VDXYDrOHJGNKq+yr2LKCqAIBmHHjfqga7AdbwpENO1pOeqdRQVQBAMw67bxU12A2wRpIBmHvLC6oKAGjGYfetWr4boLd6YcY2qipiVQDAEWj3vOpWuwF6axeqakiq8qcLSl5BVQEArWjybtV2D9N7q7eUO7wFAABoDd5YBQCAlvwPggLQKmHwz3gAAAAASUVORK5CYII=" 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[连接] 由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中.比如 ...
随机推荐
- [转]Windows Shell 编程 第九章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987969】
第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标.无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去 ...
- [Mugeda HTML5技术教程之2] Mugeda HTML5富媒体平台简介
[Mugeda HTML5技术教程之2] Mugeda HTML5动画平台简介 摘要:Mugeda提供基于云的平台,供开发人员和设计人员快速的开发.发布和统计基于HTML5的,包含丰富动画和交互的移动 ...
- POJ1850 组合数学
POJ1850 问题重述: 用26个小写字母进行编码,编码规则如下: 1)每个编码中前一个字母必须小于后一个字母 2)编码按照长度从小到大排列,相同长度按字典序进行排列 输入一个字母串,求解该编码对应 ...
- POJ2151 动态规划
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int ...
- Python一路走来 DAY15 Javascript
JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 一 如何编写 ...
- uC/OS-II中的中断(转)
中断是指在程序运行过程中,应内部或外部异步事件的请求中止当前任务,而去处理异步事件所要求的任务的过程. 中断服务函数(ISR)是应中断请求而运行的程序. 中断向量就是中断服务函数(ISR)的入口地址, ...
- AD 10 直接出 BOM 的漂亮效果
EDA 工具出BOM 需要什么格式,太多人费尽心思在代码级别做了很多工作,,,,,,,不提,,,,, 真正的BOM 需要东西呢?大家可以讨论讨论.-附件是G41 一个小板的 demo BOM,由AD1 ...
- poj3237--Tree 树链剖分
题意:三种操作 ①修改第i条边的权值为val,②把u到v路径上的所有边的权值 去相反数③求u 到v路径上最大的边权 线段树的区间更新还是不熟练,,一直搞不对调试了好久还是没对,最后还是看的kuangb ...
- Linux中open函数以及退出进程的函数
open函数的flag详解1 读写权限:O_RDONLY O_WRONLY O_RDWR (1)linux中文件有读写权限,我们在open打开文件时也可以附带一定的权限说明 (譬如O_RDONLY就表 ...
- Hive 7、Hive 的内表、外表、分区
1.Hive的内表 Hive 的内表,就是正常创建的表,在 http://www.cnblogs.com/raphael5200/p/5208437.html 中已经提到: 2.Hive的外表 创建H ...