引用类型-RegExp类型
JavaScript高级程序设计(第三版)笔记-第五章-RegExp类型
定义正则表达式有两种方式
1、用字面量形式定义正则表达式:
ver expression = /patterns/flags;
patterns:可以是任何简单或者复杂的正则表达式
flags:
g:表示全局
i:表示不区分大小写
m:表示多行模式,在到达一行的末尾时还会继续查找下一行
var patterns1 = /at/g;//匹配字符中所有“at”的实例
var patterns2 = /[bc]at/i;//匹配所有的"bat"或"cat",不区分大小写
var patterns3 = /.at/gi;//匹配所有的以"at"结尾的三个字符的组合,不区分大小写
模式中使用的所有元字符都必须转义,正则表达式中的元字符包括:( [ { \ ^ $ | ) ? * + . ] }
var patterns4 = /\[bc\]at/i;//匹配第一个"[bc]at",不区分大小写
2、用RegExp构造函数定义正则表达式,他接受两个参数(patterns,flags)
var patterns2 = new RegExp("[bc]at","i");//与var patterns2 = /[bc]at/i;相同
同样使用RegExp同样也要对元字符进行转义而且是双重转义
vqr pattterns4 = new RegExp("\\[bc\\]at","i");与var patterns4 = /\[bc\]at/i;相同
这两种方法创建的正则表达式不一样。正则表达式字面量会始终共享一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例
var re = null,
i;
for(i=0;i<10;i++){//只为/cat/创建了一个RegExp实例,第一次调用成功,第二是失败,因为当第二次调用时是从索引值为3的字符开始的,所以找不到他,当第三次调用时又会从开头开始。
re = /cat/g;
re.test("catgghi");
}
for(i=0;i<10;i++){//用RegExp构造函数在每次循环中都会创建正则表达式,所以每次调用test()都会返回true
re = new RegExp("cat","g");
re.test("catgghi");
}
RegExp实例属性
global:是否设置了g标志
ignoreCase:是否设置了i标志
multiline:是否设置了m标志
lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起
source:正则表达式的字符串表示
var patterns2 = /\[bc\]at/i;
alert(patterns2.global); //false
alert(patterns2.source); //"\[bc\]at"
RegExp实例方法
RegExp对象的主要方法是exec(),专门为捕获组设计的,接受一个参数,返回包含匹配项信息的数组,相对于Array的实例,多了两个属性index和input,在数组中,第一项是匹配的字符串,其他项是与模式中的捕获组匹配的字符串。
input:表示应用正则表达式的字符串
index:表示匹配项在字符串中的位置
var text = "mom and dad and baby";
var pattern = /mom (and dad (and baby)?)?/gi;
var matches = pattern.exec(text);
alert(matches.index); //0;
alert(matches.input); //"mom and dad and baby"
alert(matches[0]); //"mom and dad and baby"
alert(matches[1]); //"and dad and baby"
alert(matches[2]); //"and baby"
对于exec()方法,设置了全局标志(g),每次也只会返回一个匹配项。不设置全局标志的情况下,在同一个字符串上调用它是将始终返回第一个匹配项信息,设置了(g),每次调用它时都会在字符串中继续查找。
var text = "cat, bat, sat, fat"; var pattern1 = /.at/; var matches = pattern1.exex(text);
alert(matches.index); //
alert(matches[0]); //cat
alert(pattern1.lastIndex); // matches = pattern1.exex(text);
alert(matches.index); //
alert(matches[0]); //cat
alert(pattern1.lastIndex); // var pattern2 = /.at/g; var matches = pattern2.exex(text);
alert(matches.index); //
alert(matches[0]); //cat
alert(pattern1.lastIndex); // matches = pattern1.exex(text);
alert(matches.index); //
alert(matches[0]); //bat
alert(pattern1.lastIndex); //
正则表达式的第二种方法是test(),接受一个参数。在模式与该参数匹配的时返回ture,否则返回false。
RegExp构造函数属性
长属性名 短属性名 说明
input $_ 最近一次匹配的字符串
lastMatch $& 最近一次的匹配项
lastParen $+ 最近一次匹配的捕获组
leftContext $` input字符串中lastMatch之前的文本
multiline $* 布尔值,表示是否所有表达式都使用多行模式。
rightContext $' input字符串中lastMatch之后的文本
var text = "this has been a short summer";
var pattern = /(.)hort/g;
if(pattern.test(text)){
alert(RegExp.input);//(RegExp.$_) //this has been a short summer
alert(RegExp.leftContext);//(RegExp["$`"]) //this has been a
}
注意:由于某些短属性名大都不是有效的ECMAScript标识符,所以要通过方括号语法来访问他们。
还有9个用于存储捕获组的构造函数属性,RegExp.$1存储第一个捕获组,以此类推。
引用类型-RegExp类型的更多相关文章
- Javascript高级编程学习笔记(15)—— 引用类型(4)RegExp类型
JS中处理字符串最常用的应该就是正则了 同样正则(RegExp)类型也是JS中引用类型的一种 ECMAScript通过 RegExp类型 来支持正则表达式 创建正则 var expression = ...
- RegExp类型exec()方法的返回值说明
之前看别人写的插件经常会用到RegExp对象来验证输入,并且获取一些那时我并不晓得是什么东西的数组,来取值进行自定义的逻辑处理.今天学习了一下RegExp类型.终于有了一个初步的了解,至少不会看一会就 ...
- RegExp类型,单体内置对象
1.RegExp类型: 1)什么是正则表达式:RegExp --是一种规则,模式 --强大的字符串匹配工具 --创建: --使用RegExp构造函数创建:var re=new ...
- js中RegExp类型
ECMAScript通过RegExp类型来支持正则表达式. var expression = / pattern / flag ; pattern可以是任意的正则表达式.每个正则都带有标志,用以正则表 ...
- 5.4 RegExp类型
ECMAScript通过RegExp类型来支持正则表达式.使用下面类似Perl的语法,就可以创建一个正则表达式. var expression=/pattern/flags; 复制代码 其中的模式(p ...
- 《JavaScript高级程序设计》读书笔记 ---RegExp 类型
ECMAScript 通过RegExp 类型来支持正则表达式.使用下面类似Perl 的语法,就可以创建一个正则表达式.var expression = / pattern / flags ; 其中的模 ...
- [Clr via C#读书笔记]Cp5基元类型引用类型值类型
Cp5基元类型引用类型值类型 基元类型 编译器直接支持的类型,基元类型直接映射到FCL中存在的类型. 作者希望使用FCL类型名称而避免使用关键字.他的理由是为了更加的清晰的知道自己写的类型是哪种.但是 ...
- 随笔记录--RegExp类型
阅读Javascript高级程序设计第五章 -- RegExp类型总结 对于基础教程部分, 有小伙伴不熟悉的,可以参考 正则表达式 - 教程 1. 基础部分回顾: ECMASript通过RegExp类 ...
- JavaScript引用类型之RegExp类型(正则表达式)
ECMAScript中使用RegExp来支持正则表达式.使用下面类似Perl的语法,就可以创建一个正则表达式. var expression=/pattern/flags; 如上代码: pattern ...
随机推荐
- Object-C 1.0 第三章:面向对象编程基础知识(OOP)
1. 间接(indirection) 1.1 变量和间接(使用变量来代替一些数字) 1.2 使用文件名的间接 const 表示一个变量不允许 ...
- Python框架之Tornado(三)请求
概述 本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3 系列所有步骤,如上图[start]是一个死循环,其中利 ...
- 一站式解决,Android 拍照 图库的各种问题.
在android开发中, 在一些编辑个人信息的时候,经常会有头像这么一个东西,就两个方面,调用系统相机拍照,调用系统图库获取图片.但是往往会遇到各种问题: 1.oom 2.图片方向不对 3.activ ...
- MAC帧和IP包的分析
ping了12次岭南师范学院官网后退出 抓到的包如下 各个名词解释
- asp.net 项目Net4.0 在IE10、 IE 11 下出现 “__doPostBack”未定义 的解决办法
我的项目中,服务器端是Windows Server2008 64位,.net版本是4.0,也遇到了树形结构控件.DropDownList控件等不能调用服务器端代码.最后发现js报错. 错误信息:“__ ...
- flex弹性盒模型布局
容器属性:1.flex-direction:项目的排列方向(1)row 主轴方向排列(2)row-reverse 主轴反方向排列(3)column 纵向排列(4)column-reverse 纵向反方 ...
- 印象笔记 剪藏(Evernote WebClipper) bug 记录
问题记录: Chrome版的 webclipper不知为何新装的时候切换到中国版印象笔记登陆的时候闪退,然后之后就无法进入中国区的登录页面:international版确认可以登录. cookies是 ...
- 关于英语PETS5备考的一些事
首先,自我介绍一下,我叫万世想,目前国内某985高校CS硕士在读,在现代软件工程课上,接触到了博客园,之前是自己在新浪云上用WP简单搭了自己的博客,但是都没有坚持下来.希望自己能够在博客园大家庭中,与 ...
- Javascript初学篇章_8(事件)
事件 HTML 事件是发生在 HTML 元素上的事情.例如用户点击按钮时,点击也是一个事件.事件可以用于处理表单验证,用户输入,用户行为及浏览器动作,如: 页面加载时触发事件 页面关闭时触发事件 用户 ...
- STL之priority_queue
下面以 long long 型队列介绍: Q.empty() // 判断队列是否为空 返回ture表示空 返回false表示空 bool Q.top() // 返回顶端元素的值 元素还在队列里 lon ...