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[连接] 由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中.比如 ...
随机推荐
- explicit 只对构造函数起作用,用来抑制隐式转换。
class A { private: int a; public: A(int x) :a(x){} void display(){ cout << a << endl; } ...
- YUI 之getLocation
关于Y.getLocation的简介是 Returns the `location` object from the window/frame in which this YUI instance o ...
- smarty练习: 设置试题及打印试卷
数据库表格:shiti, shititimu, timu, kemu, xuanxiang 根据科目设置一个可以添加试题的页面:(如下图) 具体的题目从数据库中查出并形成一张试卷的形式 考试试题设置: ...
- 来,试试PERL
试试,看看能否真的替代AWK,SED这些的... #!/usr/bin/perl print "hello, world!\n"; $line = <STDIN>; i ...
- 这样就算会了PHP么?-3
关于循环,IF,WHILE.... <?php $month = date("n"); $today = date("j"); if ($today &g ...
- JAVA在线基础教程!
http://www.runoob.com/java/java-tutorial.html http://www.51zxw.net/list.aspx?cid=380 http://www.weix ...
- Kill 锁,1222:已超过了锁请求超时时段,
应该是你的表体积很大,处理的时候费事,因为几乎所有数据库操作都需要加或多或少的锁,所以会超时.首先你可以使用select * from sys.sysprocesses where blocked&l ...
- Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式
IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...
- Linux下PHP安装配置MongoDB数据库连接扩展
Web服务器: IP地址:192.168.21.127 PHP安装路径:/usr/local/php 实现目的: 安装PHP的MongoDB数据库扩展,通过PHP程序连接MongoDB数据库 具体操作 ...
- 知方可补不足~CSS中的几个伪元素
对于一个很好的编辑器VS来说,它对于编程语句的自动提示功能是很强大的,有时,我们根本不需要看相关API,而直接看VS给我们的提示就可以完成一个新技术的学习了. 今天我们来说几个CSS中的伪元素,它们在 ...