配色: 字号:
JScript 和 VBScript 正则表达式
2016-08-29 | 阅:  转:  |  分享 
  
JScript和VBScript正则表达式www.hunanwang.net?gasoline?going?up?up?根据所写内容,上面的句子明显存在单词多次重复的问题。如果能有一种方法无需查找每个单词的重复现象就能修改该句子就好了。下面的?JScript?正则表达式使用一个子表达式就可以实现这一功能。/\b([a-z]+)?\1\b/gi等价的?VBScript?表达式为:"\b([a-z]+)?\1\b"在这个示例中,子表达式就是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符,即由''[a-z]+''?所指定的。该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。''\1''用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。如果不这样,则诸如?"is?issued"?或?"this?is"?这样的短语都会被该表达式不正确地识别。在?JScript?表达式中,正则表达式后面的全局标志?(''g'')?表示该表达式将用来在输入字符串中查找尽可能多的匹配。大小写敏感性由表达式结束处的大小写敏感性标记?(''i'')?指定。多行标记指定可能出现在换行符的两端的潜在匹配。对?VBScript?而言,在表达式中不能设置各种标记,但必须使用?RegExp?对象的属性来显式设置。使用上面所示的正则表达式,下面的?JScript?代码可以使用子匹配信息,在一个文字字符串中将连续出现两次的相同单词替换为一个相同的单词:var?ss?=?"Is?is?the?cost?of?of?gasoline?going?up?up?.\n";var?re?=?/\b([a-z]+)?\1\b/gim;?????//创建正则表达式样式。var?rv?=?ss.replace(re,"$1");???//用一个单词替代两个单词。最接近的等价?VBScript?代码如下:Dim?ss,?re,?rvss?=?"Is?is?the?cost?of?www.visa158.comof?gasoline?going?up?up?."?&?vbNewLineSet?re?=?New?RegExpre.Pattern?=?"\b([a-z]+)?\1\b"re.Global?=?Truere.IgnoreCase?=?Truere.MultiLine?=?Truerv?=?re.Replace(ss,"$1")请注意在?VBScript?代码中,全局、大小写敏感性以及多行标记都是使用?RegExp?对象的适当属性来设置的。在replace?方法中使用?$1?来引用所保存的第一个子匹配。如果有多个子匹配,则可以用?$2,?$3?等继续引用。向后引用的另一个用途是将一个通用资源指示符?(URI)?分解为组件部分。假定希望将下述的URI?分解为协议?(ftp,?http,?etc),域名地址以及页面/路径:http://msdn.microsoft.com:80/scripting/default.htm下面的正则表达式可以提供这个功能。对?JScript,为:/(\w+):\/\/([^/:]+)(:\d)?([^#?])/对?VBScript?为:"(\w+):\/\/([^/:]+)(:\d)?([^#?])"第一个附加子表达式是用来捕获该?web?地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括?''^''、?''/''?或?'':''?字符的任何字符序列。第三个附加子表达式捕获网站端口号码,如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子表达式捕获由该?web?地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除''#''?或空格之外的字符。将该正则表达式应用于上面所示的?URI?后,子匹配包含下述内容:?RegExp.$1?包含?"http"?RegExp.$2?包含?"msdn.microsoft.com"?RegExp.$3?包含?":80"?RegExp.$4?包含?"/scripting/default.htm"

献花(0)
+1
(本文系爱就请温柔...首藏)