5.4 RegExp类型
ECMAScript通过RegExp类型来支持正则表达式。使用下面类似Perl的语法,就可以创建一个正则表达式。
- var expression=/pattern/flags;
复制代码
其中的模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。每个正则表达式都可以带有一个或多个标志(flags),用以标明正则表达式的行为。正则表达式的匹配模式支持下列3个标志。
1、g:表示全局(global)模式,即模式 将被应用于所有字符串, 而非在发现第一个匹配项时立即停止;
2、i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
3、m: 表示多行( multiline)模式,即在达到一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
因此,一个正则表达式就是一个模式与上述3个标志的组合体。不同的组合产生不同的结果,如下面的例子所示:
- /*
- *匹配字符创中所有"at"的实例
- */
- var pattern1=/at/g;
- /*
- *匹配第一个"bat"或"cat",不区分大小写
- */
- var pattern2=/[bc]at/i;
- /*
复制代码
与其他语言中的正则表达式类似,模式中使用的所有元字符都必须转义。正则表达式的元字符包括:( { [ \ ^ $ | ) ? * + . ] }
这些元字符在正则表达式中都有一或多中特殊用途,因此如果想要匹配字符串中包含发的这些字符,就必须对它们进行转义。下面给出几个例子:
- /*
- *匹配第一个"bat"或"cat",不区分大小写
- */
- var pattern1=/[bc]at/i;
- /*
- *匹配第一个"[bc]at",不区分大小写 PS:需要多方括号进行转义
- */
- var pattern2=/\[bc\]at/i;
- /*
- *匹配所有以"at"结尾的3个字符的组合,不区分大小写
- */
- var pattern3=/.at/gi;
- /*
- *匹配所有".at",不区分大小写 PS:需要对句点进行转义
- */
- var pattern4=/\.at/gi;
复制代码
前面的这些例子,都是以字面量形式来定义的正则表达式。另一种创建正则表达式的方式是使用RegExp构造函数,它接受两个参数:一个是匹配的字符串模式,二是可选的标志字符串。可以使用字面量定义的任何表达式,都可以使用构造函数来定义,如下面的例子所示:
- /*匹配第一个"bat"或"cat",不区分大小写*/
- var pattern1=/[bc]at/i;
- /*与pattern1相同,但是使用构造函数创建的*/
- var pattern2=new RegExp("[bc]at","i");
复制代码
这里,pattern1hepattern2是两个完全相同的正则表达式。需要注意的,传递给RegExp构造函数的两个参数都是字符串(不能把正则表达式字面量传递给RegExp构造函数)。由于RegExp构造函数的模式参数是字符串,所以在某些情况下要对字符串进行双重转义。所有元字符都必须双重转义,那些已经转义过的字符串也是如此,例如\n(字符\在字符串中通常被转义为\\,而在正则表达式字符串中就会变成\\\)。下表给出了一些模式,左边是这些字面量形式,右边是使用RegExp构造函数定义相同模式时使用的字符串。
|
字面量模式
|
等价的字符串
|
|
/\[bc]at/
|
"\\[bc\\]at"
|
|
/\.at/
|
"\\.at"
|
|
/name\/age
|
"name\\/age"
|
|
/\d.\d{1,2}/
|
"\\d.\\d{1,2}"
|
|
/\w\\hello\\123/
|
"\\w\\\\hello\\\\123"
|
使用正则表达式字面量和使用RegExp构造函数创建的正则表达式不一样。在ECMAScript 3 中,正则表达式字面量始终会共享同一个RegExp实例,而使用构造函数创建的每一个新的RegExp实例都是一个新的实例,来看下面的例子:
- var re=null,i;
- for(i=0;i<10;i++)
- {
- re=/cat/g;
- re.test("catastrophe");
- }
- for(i=0;i<10;i++)
- {
- re=new RegExp("cat","g");
- re.test("catastrophe");
- }
复制代码
在下一个循环中,即使是循环体中指定的,但实际上只是为/cat/创建了一个RegExp实例。由于实例属性(下一节介绍实例属性)不会重置,所以在循环中再次调用test()方法会失败。这是因为第一次调用test()找到了”cat“,但是第二次调用是从索引为3的字符(上一次匹配的末尾)开始的,所以就找不到它了。由于会测试到字符串末尾,所以下一次在调用test()就有从头开始了。
第二个循环使用RegExp构造函数在每次循环中创建正则表达式。因为每次迭代都会创建一个新的RegExp实例,所以每次调用test()都会返回true。
ECNAScript 5 明确规定,使用正则表达式字面量必须像直接调用RegExp构造函数一样,每次都创建新的RegExp实例。IE9+、FF4+和Chrome都据此做出了修改。
注:我是小小白,欢迎各位大神指出文中不对的地方^_^~~
5.4 RegExp类型的更多相关文章
- 引用类型-RegExp类型
JavaScript高级程序设计(第三版)笔记-第五章-RegExp类型 定义正则表达式有两种方式 1.用字面量形式定义正则表达式: ver expression = /patterns/flags; ...
- RegExp类型exec()方法的返回值说明
之前看别人写的插件经常会用到RegExp对象来验证输入,并且获取一些那时我并不晓得是什么东西的数组,来取值进行自定义的逻辑处理.今天学习了一下RegExp类型.终于有了一个初步的了解,至少不会看一会就 ...
- RegExp类型,单体内置对象
1.RegExp类型: 1)什么是正则表达式:RegExp --是一种规则,模式 --强大的字符串匹配工具 --创建: --使用RegExp构造函数创建:var re=new ...
- js中RegExp类型
ECMAScript通过RegExp类型来支持正则表达式. var expression = / pattern / flag ; pattern可以是任意的正则表达式.每个正则都带有标志,用以正则表 ...
- 《JavaScript高级程序设计》读书笔记 ---RegExp 类型
ECMAScript 通过RegExp 类型来支持正则表达式.使用下面类似Perl 的语法,就可以创建一个正则表达式.var expression = / pattern / flags ; 其中的模 ...
- Javascript高级编程学习笔记(15)—— 引用类型(4)RegExp类型
JS中处理字符串最常用的应该就是正则了 同样正则(RegExp)类型也是JS中引用类型的一种 ECMAScript通过 RegExp类型 来支持正则表达式 创建正则 var expression = ...
- 随笔记录--RegExp类型
阅读Javascript高级程序设计第五章 -- RegExp类型总结 对于基础教程部分, 有小伙伴不熟悉的,可以参考 正则表达式 - 教程 1. 基础部分回顾: ECMASript通过RegExp类 ...
- RegExp类型(正则表达式)
直接量语法 /pattern/attributes 创建 RegExp 对象的语法: new RegExp(pattern, attributes); 一.attributes: 修饰符 描述 i 执 ...
- JS RegExp类型
用来定义正则表达式的类型, 1. 通常情况下,我们可以直接用字面量形式来定义正则表达式,格式如下: var expression = /pattern/flags pattern为正则表达式 flag ...
随机推荐
- 如何阅读mysql源码
在微博上问mysql高手,如何阅读mysql 源码大致给了下面的一些建议: step 1,知道代码的组织结构(官方文档http://t.cn/z8LoLgh: Step2: 尝试大致了解一条sql涉及 ...
- 基于Hadoop的大数据平台实施记——整体架构设计
大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大 ...
- 教你爱上Blocks(闭包)
传值 Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数.通过Blocks,源代码中就能使用匿名函数,即不带名称的函数.在我们 的工作中,命名占据了很大一部分,函数名,变量名,属性名, ...
- ASP.NET导出EXCEl方法使用EXCEl对象
导出功能必须使用 office中EXCEl对象,整个操作如同在操作EXCEl一样,建立EXCEl应用----建立工作簿---建立sheet表单页, 代码实现过程中,如果想对单元格实现一些操作,或者汇 ...
- JavaScript奇技淫巧45招
JavaScript奇技淫巧45招 撰写于 2015年1月5日 修改于 2016年6月16日 分类 翻译 标签 JavaScript 本文是一篇翻译文章,原文信息如下: 原文:45 Useful Ja ...
- SPFile上传文件到文档库
, dataLen); SPSite sps = SPControl.GetContextSite(Context); sps.AllowUnsafeUpd ...
- 2014-11-21 DHTMLX是什么
什么是dhtmlx? dhtmlx是一套网页开发 的函式库,他提供了树状元件.数据方格组件.工具列等组件供开发 人员使用. dhtmlx组件是一个JavaScript 库,提供了一套完整的Ajax驱动 ...
- 展开BOM并使用最终用量的算法(转载)
本文系转载子ITPUB,如果有侵犯您权益的地方,烦请及时的告知与我,我即刻将停止侵权行为: 网址:http://www.itpub.net/thread-1020586-1-1.html http:/ ...
- Sql Server之数据库规范——1、自动化规范命名
一.废话: 随着数据库的规模越来越大,数据库的表也有成百上千,如果需要对数据库表名及字段名做操作,单个还好,直接一条语句搞定了,但如果要对整个库的所有表和字段名做操作,那就显得有点麻烦了.因此,我们需 ...
- C++/C#结构体转化-二维数组-bytes To Strings
C++结构体 typedef struct VidyoClientRequestGetWindowsAndDesktops_ { /*! The number of application windo ...