读书笔记
把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[连接] 由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中.比如 ...
随机推荐
-
AngularJS之WebAPi上传(十)
前言 前面一系列我们纯粹是讲AngularJS,在讲一门知识时我们应该结合之前所学综合起来来做一个小的例子,前面我们讲了在MVC中上传文件的例子,在本节我们讲讲如何利用AngularJS在WebAPi ...
-
IntelliMVCCode智能MVC架构的代码助手使用方法
智能代码生成工具,快速帮助开发者提升开发速度,通过工具自动生成MVC架构的大量源代码,节省更多的开发时间. 工具使用的框架:.net4.0,通过工具连接到数据库自动提取数据表或视图中的结构,生成对应的 ...
-
java 异常处理 Throwable Error 和Exception
Java异常类层次结构图: 异常的英文单词是exception,字面翻译就是“意外.例外”的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 比如使用 ...
-
java-源码下载
jdk7 下载: http://download.java.net/openjdk/jdk7/ jdk8 下载: http://download.java.net/openjdk/jdk8/
-
《Python CookBook2》 第四章 Python技巧 对象拷贝 &;&; 通过列表推导构建列表
(先学第四章) 对象拷贝 任务: Python通常只是使用指向原对象的引用,并不是真正的拷贝. 解决方案: >>> a = [1,2,3] >>> import c ...
-
C#中的lock关键字(初识)
http://kb.cnblogs.com/page/88513/ 首先给出MSDN的定义: lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.这是通过在代码块运行期间为给定对象获取互 ...
-
PHP MySql数据库访问
PHP MySql数据库访问 计应134 凌豪 1.MySql数据库的连接 要操作MySql数据库,首先必须与MySQl数据库建立连接,连接MySQL服务器的语句如下: <?php$link ...
-
Dojo baseurl
dojo.baseUrl baseUrl用来存储dojo.js存放 的跟目录,例如dojo.js的路径是“/web/scripts/dojo-1.3/dojo/dojo.js”则baseUrl为“/w ...
-
Calendar 实现日历实例
import java.text.ParseException; import java.util.Calendar; import java.util.GregorianCalendar; impo ...
-
【译】:python中的colorlog库
本文翻译自colorlog官方文档 一. 描述 colorlog.ColoredFormatter是一个Python logging模块的格式化,用于在终端输出日志的颜色 二. 安装 pip inst ...