javascript中的正则表达式解析

上传人:wm****3 文档编号:43438897 上传时间:2018-06-06 格式:DOC 页数:13 大小:21.84KB
返回 下载 相关 举报
javascript中的正则表达式解析_第1页
第1页 / 共13页
javascript中的正则表达式解析_第2页
第2页 / 共13页
javascript中的正则表达式解析_第3页
第3页 / 共13页
javascript中的正则表达式解析_第4页
第4页 / 共13页
javascript中的正则表达式解析_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《javascript中的正则表达式解析》由会员分享,可在线阅读,更多相关《javascript中的正则表达式解析(13页珍藏版)》请在金锄头文库上搜索。

1、JavaScriptJavaScript 中的正则表达式解析中的正则表达式解析JavaScript 中的正则表达式解析http:/ 更新日期:2005-10-22 网页教学网 浏览次数: 477正则表达式是一个描述字符模式的对象。JavaScript 的 RegExp 对象和 String 对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法.在 JavaScript 中,正则表达式是由一个 RegExp 对象表示的.当然,可以使用一个 RegExp()构造函数来创建 RegExp 对象,也可以用JavaScript 1.2 中的新添加的一个特殊语法来创建 RegExp 对象

2、.就像字符串直接量被定义为包含在引号内的字符一样,正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符.所以,JavaScript 可能会包含如下的代码:var pattern = /s$/;这行代码创建一个新的 RegExp 对象,并将它赋给变量 parttern.这个特殊的 RegExp 对象和所有以字母“s“结尾的字符串都匹配.用RegExp()也可以定义一个等价的正则表达式,代码如下:var pattern = new RegExp(“s$“);无论是用正则表达式直接量还是用构造函数 RegExp(),创建一个 RegExp 对象都是比较容易的.较为困难的任务是用正则表达式语法来描

3、述字符的模式.JavaScript 采用的是 Perl 语言正则表达式语法的一个相当完整的子集.正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/就和所有包含子串 “java“ 的字符串相匹配.虽然正则表达式中的其它字符不是按照字面意思进行匹配的,但它们都具有特殊的意义.正则表达式 /s$/ 包含两个字符.第一个特殊字符 “s“ 是按照字面意思与自身相匹配.第二个字符 “$“ 是一个特殊字符,它所匹配的是字符串的结尾.所以正则表达式 /s$/ 匹配的就是以字母 “s“ 结尾的字符串.1.直接量字符我

4、们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.JavaScript 的正则表达式还通过以反斜杠()开头的转义序列支持某些非字母字符.例如,序列 “n“ 在字符串中匹配的是一个直接量换行符.在正则表达式中,许多标点符号都有特殊的含义.下面是这些字符和它们的含义:正则表达式的直接量字符字符 匹配_字母数字字符 自身 f 换页符 n 换行符 r 回车 t 制表符 v 垂直制表符 / 一个 / 直接量 一个 直接量 . 一个 . 直接量 * 一个 * 直接量 + 一个 + 直接量 ? 一个 ? 直接量 | 一个 | 直接量 ( 一个 ( 直接量 ) 一个 ) 直接量

5、一个 直接量 一个 直接量 一个 直接量 一个 直接量 XXX 由十进制数 XXX 指 定的 ASCII 码字符 Xnn 由十六进制数 nn 指定的 ASCII 码字符 cX 控制字符X. 例如, cI 等价于 t, cJ 等价于 n_如果想在正则表达式中使用特殊的标点符号,必须在它们之前加上一个 “ .2.字符类将单独的直接符放进中括号内就可以组合成字符类.一个字符类和它所包含的任何一个字符都匹配,所以正则表达式 / abc / 和字母 “a“ , “b“ , “c“ 中的任何一个都匹配.另外还可以定义否定字符类,这些类匹配的是除那些包含在中括号之内的字符外的所有字符.定义否定字符尖时,要将

6、一个 符号作为从左中括号算起的第一个字符.正则表达式的集合是 / a-zA-z0-9 / .由于某些字符类非常常用,所以 JavaScript 的正则表达式语法包含一些特殊字符和转义序列来表示这些常用的类.例如, s 匹配的是空格符,制表符和其它空白符, s 匹配的则是空白符之外的任何字符.正则表灰式的字符类字符 匹配_. 位于括号之内的任意字符. 不在括号之中的任意字符. 除了换行符之外的任意字符,等价于nw 任何单字字符, 等价于a-zA-Z0-9W 任何非单字字符,等价于a-zA-Z0-9s 任何空白符,等价于 t n r f vS 任何非空白符,等价于 t n r f vd 任何数字,

7、等价于0-9D 除了数字之外的任何字符,等价于0-9b 一个退格直接量(特例)_3.复制用以上的正则表式的语法,可以把两位数描述成 / d d /,把四位数描述成 / d d d d /.但我们还没有一种方法可以用来描述具有任意多数位的数字或者是一个字符串.这个串由三个字符以及跟随在字母之后的一位数字构成.这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数.指定复制的字符总是出现在它们所作用的模式后面.由于某种复制类型相当常用.所以有一些特殊的字符专门用于表示它们.例如: +号匹配的就是复制前一模式一次或多次的模式.下面的表列出了复制语法.先看一个例子:/d2, 4/

8、/匹配 2 到 4 间的数字./w3 d?/ /匹配三个单字字符和一个任意的数字./s+javas+/ /匹配字符串“java“ ,并且该串前后可以有一个或多个空格./“ * / /匹配零个或多个非引号字符.正则表达式的复制字符字符 含义_n, m 匹配前一项至少 n 次,但是不能超过 m 次n, 匹配前一项 n 次,或者多次n 匹配前一项恰好 n 次? 匹配前一项 0 次或 1 次,也就是说前一项是可选的. 等价于 0, 1+ 匹配前一项 1 次或多次,等价于1,* 匹配前一项 0 次或多次.等价于0,_4.选择,分组和引用正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的

9、特殊字符.字符| 用于分隔供选择的字符.例如: /ab|cd|ef/ 匹配的是字符串 “ab“,或者是字符串 “cd“,又或者 “ef“. /d3|a-z4/ 匹配的是要么是一个三位数,要么是四个小写字母.在正则表达式中括号具有几种作用.它的主要作用是把单独的项目分组成子表达式,以便可以像处理一个独立的单元那种用 *、+或? 来处理那些项目.例如: /java(script) ?/ 匹配的是字符串 “java“,其后既可以有 “script“,也可以没有. /(ab|cd) + |ef) / 匹配的既可以是字符串 “ef“,也可以是字符串“ab“ 或者 “cd“ 的一次或多次重复.在正则表达式

10、中,括号的第二个用途是在完整的模式中定义子模式。当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配的部分.例如,假定我们正在检索的模式是一个或多个字母后面跟随一位或多位数字,那么我们可以使用模式 / a-z + d+/.但是由于假定我们真正关心的是每个匹配尾部的数字,那么如果我们将模式的数字部分放在括号中 (/ a-z + (d+)/) ,我们就可以从所检索到的任何匹配中抽取数字了,之后我们会对此进行解析的.代括号的子表达式的另一个用途是,允许我们在同一正则表达式的后面引用前面的子表达式.这是通过在字符串 后加一位或多位数字来实现的.数字指的是代括号的子表达式

11、在正则表达式中的位置.例如: 1 引用的是第一个代括号的子表达式. 3 引用的是第三个代括号的子表达式.注意,由于子表达式可以嵌套在其它子表达式中,所以它的位置是被计数的左括号的位置.例如:在下面的正则表达式被指定为 2:/(Jjava(Sscript) sis s (funw*) /对正则表达式中前一子表达式的引用所指定的并不是那个子表达式的模式,而是与那个模式相匹配的文本.这样,引用就不只是帮助你输入正则表达式的重复部分的快捷方式了,它还实施了一条规约,那就是一个字符串各个分离的部分包含的是完全相同的字符.例如:下面的正则表达式匹配的就是位于单引号或双引号之内的所有字符.但是,它要求开始和

12、结束的引号匹配(例如两个都是双引号或者都是单引号):/ “ “* “/如果要求开始和结束的引号匹配,我们可以使用如下的引用:/( “ ) “ * 1/1 匹配的是第一个代括号的子表达式所匹配的模式.在这个例子中,它实施了一种规约,那就是开始的引号必须和结束的引号相匹配.注意,如果反斜杠后跟随的数字比代括号的子表达式数多,那么它就会被解析为一个十进制的转义序列,而不是一个引用.你可以坚持使用完整的三个字符来表示转义序列,这们就可以避免混淆了.例如,使用 044,而不是44.下面是正则表达式的选择、分组和引用字符:字符 含义_| 选择.匹配的要么是该符号左边的子表达式,要么它右边的子表达式(.)

13、分组.将几个项目分为一个单元.这个单元可由 *、+、?和|等符号使用,而且还可以记住和这个组匹配的字符以供此后引用使用n 和第 n 个分组所匹配的字符相匹配.分组是括号中的子表达式(可能是嵌套的).分组号是从左到右计数的左括号数_5.指定匹配的位置我们已经看到了,一个正则表达式中的许多元素才能够匹配字符串的一个字符.例如: s 匹配的只是一个空白符.还有一些正则表达式的元素匹配的是字符之间宽度为 0 的空间,而不是实际的字符例如: b 匹配的是一个词语的边界,也就是处于一个/w 字字符和一个w 非字字符之间的边界.像b 这样的字符并不指定任何一个匹配了的字符串中的字符,它们指定的是匹配所发生的

14、合法位置.有时我们称这些元素为正则表达式的锚.因为它们将模式定位在检索字符串中的一个特定位置.最常用的锚元素是 , 它使模式依赖于字符串的开头,而锚元素$则使模式定位在字符串的末尾.例如:要匹配词 “javascript“ ,我们可以使用正则表达式 / javascript $/. 如果我们想检索 “java“ 这个词自身 (不像在 “javascript“ 中那样作为前缀),那么我们可以使用模式 /s java s /, 它要求在词语 java 之前和之后都有空格.但是这样作有两个问题.第一: 如果 “java“ 出现在一个字符的开头或者是结尾.该模式就不会与之匹配,除非在开头和结尾处有一个空格. 第二: 当这个模式找到一个与之匹配的字符时,它返回的匹配的字符串前端和后端都有空格,这并不是我们想要的.因此,我们使用词语的边界 b 来代替真正的空格符 s 进行匹配. 结果表达式是 /b java b/.下面是正则表达式的锚字符:字符 含义_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号