配色: 字号:
JScript中正则表达函数的说明与应用
2016-09-03 | 阅:  转:  |  分享 
  
JScript中正则表达函数的说明与应用

作为模式匹配下文本替换、搜索、提取的强有力工具,正则表达式(RegularExpression)的应用已经从unix平台逐渐渗入到网络开发中了,作为服务器端/客户端的脚本开发语言JScript,正越来越多将正则表达式应用融入其中,以弥补自身在文本上处理能力的不足。在此,我们以JScript5.5版本为例,对其中的正则表达式的应用作一个概述。首先我们需要区分JScript中关于正则表达式的两个对象:RegularExpression对象和RegExp对象。前者仅包含一个特定的正则表达式实例的信息,而后者通过一个全局变量的属性来反映最近模式匹配的特性。前者在匹配前需要指定匹配模式,即创建一个RegularExpression对象的实例,而后可以把它传递给一个字符串方法,或是把一个字符串作为参数传递给这个RegularExpression实例的方法;而后者无需创建,它是一个固有的全局对象,每次成功匹配操作结果信息被保存在这个对象的属性中。一、RegExp对象的属性:反应最近一次成功匹配的结果信息input:保存执行匹配的字符串(被搜索的目标字符串)(>=IE4)index:保存匹配的首字符的位置>=IE4)lastIndex:保存匹配的字符串的下一个字符的位置(>=IE4)lastMatch($&):保存匹配到的字符串(>=IE5.5)lastParen($+):保存匹配结果最后一个子匹配的内容(最后一个括号的匹配内容)(>=IE5.5)leftContext($`):保存目标字符串中匹配子字符串前的所有字符(>=IE5.5)rightContext($''):保存目标字符串中匹配子字符串后的所有字符(>=IE5.5)$1-$9:保存匹配中最开始的9个子匹配(即最开始的9个括号内的匹配结果)(>=IE4)二、RegularExpression对象简介1.RegularExpression对象定义在脚本中使用正则表达式模式匹配,首先腰设定匹配模式,方法有如下两种(1)rgExp=/pattern/[flags](2)rgExp=newRegExp("pattern",["flags"])注意:a.后者模式中的转义字符“\”需要用“\\”表示,用以抵消JS中转义字符"\"的意义,否则JS首先作为自己的转义概念来解释"\"后的字符。b.flags标识有以下几个(至JScript5.5版本)g:设定当前匹配为全局模式i:忽略匹配中的大小写检测m:多行搜索模式2.RegularExpression对象属性(1)rgExp.lastIndex:匹配结果后面一个字符的位置,同RegExp.lastIndex(2)rgExp.source:reExp对象的正则表达式匹配模式3.RegularExpression对象方法(1)rgExp.compile(pattern,[flags])将rgExp转化为内部格式,以加快匹配的执行,这对于大量模式一致的匹配更有效(2)rgExp.exec(str)按照rgExp的匹配模式对str字符串进行匹配查找,当rgExp对象中设定了全局搜索模式(g),则匹配查找从RegExp对象lastIndex属性所指定的目标字符串位置开始;若没有设置全局搜索,则从目标字符串第一个字符开始搜索。若没有任何匹配发生,返回null。需要注意的是该方法将匹配结果放在一个数组内返回,该数组有三个属性input:包含目标字符串,同RegExp.indexindex:匹配到的子字符串在目标字符串中的位置,同RegExp.indexlastIndex:匹配到的子字符串后面一个字符的位置,同RegExp.lastIndex(3)rgExp.test(str)返回布尔值来反映被查找的目标字符串str中是否存在符合匹配的模式。该方法不改变RegExp的属性4.与正则表达式相关的方法主要是指字符串对象中应用模式匹配的方法(1)stringObj.match(rgExp)根据rgExp对象的正则表达式模式查找字符串stringObj中的匹配字符项,将结果以数组形式返回。该数组有三个属性值,与exec方法返回的数组属性相同。若没有任何匹配,返回null。需要注意的是,若rgExp对象未设定全局匹配模式,则数组0下标元素为匹配的整体内容,1~9包含了子匹配得到的字符。若设定了全局模式,则数组包含了搜索到的所有整体匹配项。(2)stringObj.replace(rgExp,replaceText)返回一个字符串,即将stringObj中符合rgExp模式匹配的字符串替换成replaceText后返回。需要注意的是stringObj本身并不因为替换操作而改变。若期望stringObj中所有符合正则表达式模式的字符串被替换,则在建立正则表达式模式时要设定为全局模式。(3)stringObj.search(rgExp)返回第一个匹配到的子字符串的位置符号名词解释:位置:表示子字符串与目标字符串首字符的偏移reExp:表示一个RegularExpression对象实例stringObj:表示一个字符串对象pattern:正则表达式模式flags:匹配操作的模式标识在实际web程序开发中我们可以有针对性的使用正则表达式来达到我们字符串处理的要求如下附上四个使用正则表达式的JScript例程,这些例子主要用来熟悉正则表达式的使用。1.email地址有效性检测functionvalidateEmail(emailStr){varre=/^[\w.-]+@([0-9a-z][\w-]+\.)+[a-z]{2,3}$/i;//或varre=newRegExp("^[\\w.-]+@([0-9a-z][\\w-]+\\.)+[a-z]{2,3}$","i");if(re.test(emailStr)){alert("有效email地址!");returntrue;}else{alert("无效email地址!");returnfalse;}}2.字符串替换操作varr,pattern,re;vars="Therainwww.visa158.comtheplainfalls.";pattern=/falls/ig;re=s.replace(re,''falling'');alert(''s=''+s+''\n''+''re=''+re);3.模式查找字符串varindex,pattern;varstr="fourforfallwww.hunanwang.netwaterfalls";pattern=/\bfalls\b/i;index=str.search(pattern);alert(''Thepositionofmatchisat''+index);3.正则表达式属性例程functionmatchAttrib(){vars='''';varre=newRegExp("d(b+)(d)","ig");varstr="cdbBbdbsbdbdz";while((arr=re.exec(str))!=null){s+="=======================================
";s+="$1returns:"+RegExp.$1+"
";s+="$2returns:"+RegExp.$2+"
";s+="$3returns:"+RegExp.$3+"
";s+="inputreturns:"+RegExp.input+"
";s+="indexreturns:"+RegExp.index+"
";s+="lastIndexreturns:"+RegExp.lastIndex+"
";s+="lastMatchreturns:"+RegExp.lastMatch+"
";s+="leftContextreturns:"+RegExp.leftContext+"
";s+="rightContextreturns:"+RegExp.rightContext+"
";s+="lastParenreturns:"+RegExp.lastParen+"
";s+="arr.indexreturns:"+arr.index+"
";s+="arr.lastIndexreturns:"+arr.lastIndex+"
";s+="arr.inputreturns:"+arr.input+"
";s+="re.lastIndexreturns:"+re.lastIndex+"
";s+="re.sourcereturns:"+re.source+"
";}return(s);//Returnresults.}document.write(matchAttrib());

献花(0)
+1
(本文系白狐一梦首藏)