|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
14.后向引用 正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下,对一个正则表 达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕捉元字符 \\\'?:\\\', \\\'?=\\\', or \\\'?!\\\' 来忽略对这部分正则表达式的保存。 所捕捉的每个子匹配都按照在正则表达式模式中从左至右所碰到的内容存储。存储子匹配的缓冲区编号从 1 开始,连续编 号直至最大 99 个子表达式。每个缓冲区都可以使用 \\\'n\\\' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制 数。 后向引用一个最简朴,最有用的应用是提供了确定文字中连续出现两个一样单词的位置的能力。请看下面的句子: Is is the cost of of gasoline going up up? 根据所写内容,上面的句子明显存在单词多次重复的问题。假如能有一种方式无需查找每个单词的重复现象就能修改该句 子就好了。下面的 Visual Basic Scripting Edition 正则表达式使用一个子表达式就可以实现这一功能。 /b([a-z]+) 1b/gi 等价的 VBScript 表达式为: "b([a-z]+) 1b" 在这个示例中,子表达式就是圆括号之间的每一项。所捕捉的表达式包括一个或多个字母字符,即由\\\'[a-z]+\\\' 所指定的。 该正则表达式的第二部分是对前面所捕捉的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。\\\'1\\\'用来指 定第一个子匹配。单词边界元字符确保只检测单独的单词。假如不这样,则诸如 "is issued" 或 "this is" 这样的短语 都会被该表达式不准确地识别。 在 Visual Basic Scripting Edition 表达式中,正则表达式后面的全局标志 (\\\'g\\\') 表示该表达式将用来在输入字符串中 查找尽可能多的匹配。大小写敏感性由表达式结束处的大小写敏感性标记 (\\\'i\\\') 指定。多行标记指定可能出现在换行符的 两端的潜在匹配。对 VBScript 而言,在表达式中不能设置各种标记,但必须使用 RegExp 对象的属性来显式设置。 使用上面所示的正则表达式,下面的 Visual Basic Scripting Edition 代码可以使用子匹配信息,在一个文字字符串中 将连续出现两次的一样单词替换为一个一样的单词: var ss = "Is is the cost of of gasoline going up up?.n"; var re = /b([a-z]+) 1b/gim; //创建正则表达式样式. var rv = ss.replace(re,"$1"); //用一个单词替代两个单词. 最接近的等价 VBScript 代码如下: Dim ss, re, rv ss = "Is is the cost of of gasoline going up up?." & vbNewLine Set re = New RegExp re.Pattern = "b([a-z]+) 1b" re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.Replace(ss,"$1") 请注重在 VBScript 代码中,全局、大小写敏感性以及多行标记都是使用 RegExp 对象的适当属性来设置的。 在replace 方式中使用 $1 来引用所保存的第一个子匹配。假如有多个子匹配,则可以用 $2, $3 等继承引用。 后向引用的另一个用途是将一个通用资源指示符 (URI) 分解为组件部分。假定希望将下述的URI 分解为协议 (ftp, http, etc),域名地址以及页面/路径: http://msdn.microsoft.com:80/scripting/default.htm 下面的正则表达式可以提供这个功能。对 Visual Basic Scripting Edition,为: /(w+)://([^/:]+)(:d*)?([^# ]*)/ 对 VBScript 为: "(w+)://([^/:]+)(:d*)?([^# ]*)" 第一个附加子表达式是用来捕捉该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第 二个附加子表达式捕捉该地址的域名地址。该子表达式匹配不包括 \\\'^\\\'、 \\\'/\\\' 或 \\\':\\\' 字符的任何字符序列。第三个附加 子表达式捕捉网站端口号码,假如指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子 表达式捕捉由该 web 地址指定的路径以及或者页面信息。该子表达式匹配一个和多个除\\\'#\\\' 或空格之外的字符。 将该正则表达式应用于上面所示的 URI 后,子匹配包含下述内容: RegExp.$1 包含 "http" RegExp.$2 包含 "msdn.microsoft.com" RegExp.$3 包含 ":80" RegExp.$4 包含 "/scripting/default.htm" 返回类别: 教程 上一教程: 加密QUERYSTRING数据 下一教程: MD5加密的JAVASCRIPT实现例子 您可以阅读与"正则表达式简介(14)"相关的教程: · 正则表达式简介(14) · 正则表达式简介(12) · 正则表达式简介(11) · 正则表达式简介(12) · 正则表达式简介(4) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |