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 ...
随机推荐
- c#搭建服务端 准备工作(1)
思路 搭建服务器主要为了接收客户端所传来的数据,在学习过程中,整体的搭建逻辑大体分为以下几个步骤: 1.启动线程监听服务端口 2.监听客户端链接并进行处理 3.接收客户端传入的消息 4.向客户端回传( ...
- Eclipse无法识别(手机)设备的解决方案
遇到问题 开始学习android一个多月了,用Eclipse开发,用android手机调试.之前一直好好的,突然Eclipse无法识别手机设备了.纠结了好久,找了各种解决方法,弄了一晚上终于解决问题了 ...
- Java SSH框架学习(入门)
SSH就是 struts+spring+hibernate 的一个集成框架,是java中一种流行的JAVA WEB 应用程序开源框架.由于我最熟悉的还是ASP.NET的的MVC和Python的Djan ...
- WINFORM中几句程序获取整个屏幕的图片及当前窗口的图片快照
/// <summary> /// 获取整个屏幕的图片 /// </summary> /// <returns></returns ...
- <转>LINQ To SQL 语法及实例大全
一篇很全很强大的linq to sql 总结 来源:http://blog.csdn.net/pan_junbiao/article/details/7015633 目录(?)[-] LINQ to ...
- GridView边线Border设置
1.黑色实线:(行列都有) <asp:GridViewID="GridView1"runat="server"CellPadding="3&qu ...
- Web定时执行某个方法-网页获取
实现该功能用到的是System.Timers.Timer 将定时的方法添加到Global.ascx.cs中 public class Global : System.Web.HttpApplicati ...
- java中log4j的使用体验
log4j相信大部分java开发者都已经很熟悉了,在此记录下自己的使用过程. 一.文件准备: 1.log4j.jar(我这里使用的版本是log4j-1.2.17.jar,在附件中提供下载) 2.log ...
- java 正则表达式抽取
package com.achun.test; import java.util.regex.Matcher;import java.util.regex.Pattern; public class ...
- C++/C#结构体转化-二维数组-bytes To Strings
C++结构体 typedef struct VidyoClientRequestGetWindowsAndDesktops_ { /*! The number of application windo ...