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[连接] 由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中.比如 ...
随机推荐
- C#Graphics画图
public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { G ...
- C#Dictionary 实例
Dictionary<int, string> dc = new Dictionary<int, string>(); dc.Add(, "看了"); dc ...
- CODEVS 1287 矩阵乘法
1287 矩阵乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊) ...
- linux int to string 方法
最近从windows 移植程序的时候发现to_string()函数在linux 中不能用,网上找了几种方法,觉得使用stringstream对象来实现类型转化比较好一点. 你只需在你工程中加入下面的t ...
- POJ 1151 - Atlantis 线段树+扫描线..
离散化: 将所有的x轴坐标存在一个数组里..排序.当进入一条线段时..通过二分的方式确定其左右点对应的离散值... 扫描线..可以看成一根平行于x轴的直线..至y=0开始往上扫..直到扫出最后一条平行 ...
- 3月23日html(四) 格式与布局
一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. 二.position:absolute 1.外层没有position:absolute(或relat ...
- DIV 遮挡问题总结
1.DIV被Silverlight遮挡, 加入windowless参数即可. <object id=”silverlight” data=”data:application/x-silverli ...
- JAVA_build_ant_FixCRLF
Description Adjusts a text file to local conventions. The set of files to be adjusted can be refined ...
- 十六进制string转换UIColor -备用
- (UIColor *) colorWithHexString: (NSString *) stringToConvert { NSString *cString = [[stringToConve ...
- android手机端保存xml数据
1.前面写的这个不能继续插入数据,今天补上,当文件不存在的时候就创建,存在就直接往里面添加数据. 2.代码如下: <pre name="code" class="j ...