正则表达式(二)
发布时间:2020-12-13 22:50:30 所属栏目:百科 来源:网络整理
导读:4、RegExp对象的属性。 index 属性 | input 属性 | lastIndex 属性 | lastMatch 属性 | lastParen 属性| leftContext 属性 | rightContext 属性 注意:上面的属性,有些需要直接使用RegExp.property来调用,有些使用RegExp的实例.property来调用。我没有发现
4、RegExp对象的属性。
index 属性 | input 属性 | lastIndex 属性 | lastMatch 属性 | lastParen 属性| leftContext 属性 | rightContext 属性
注意:上面的属性,有些需要直接使用RegExp.property来调用,有些使用RegExp的实例.property来调用。我没有发现有哪个手册说的比较明确,只能硬记住,或具体使用 的时候试一下。 示例: <script type="text/javascript"> var str = "s443434 dddddddddddddddddds 43434ssssdd 3333ssdfd 8888sdsfdsf"; var strRule = new RegExp("(d){4}","gi"); while(res=strRule.exec(str)){ document.write("index="+res.index+" left="+RegExp.leftContext+"<br />"); } </script> 5、子表达式、捕获、后向引用正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下,对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 '?:','?=',or '?!' 来忽略对这部分正则表达式的保存。
所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 'n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
5.1 后向引用一个最简单,最有用的应用是提供了确定文字中连续出现两个相同单词的位置的能力。
示例:
<script type="text/javascript"> var str = "s443434 dddddddddddddddddds 4433ssssdd 3333ssdfd 8668sdsfdsf"; //查找格式为"aabb"的数字,例子中的12,这些数字是跟小括号的个数相关 var strRule1 = /(d)1(d)2/gi; while(res=strRule1.exec(str)){ document.write(res[0]+"<br />"); } document.write("---------------------割--------------------<br />"); //查找格式为"abba"的数字 var strRule2 = new RegExp("(d)(d)21","gi"); while(res=strRule2.exec(str)){ document.write(res[0]+"<br />"); } document.write("---------------------割--------------------<br />"); //查找形式如"12345-111222333",即前5位任意数字和"-",后跟三组相同的三个数字 var str2 = "09345-111222333kldskflskdfjds230432u40234-45453454345"; var strRule3 = /(d){5}-(d)22(d)33(d)44/gi; //var strRule3 = /(d){5}-((d)22){3}/gi; //这个写法是错误的 while(res=strRule3.exec(str2)){ document.write(res[0]+"<br />"); } </script> 5.2 后向引用的另一个用途是将一个通用资源指示符 (URI) 分解为组件部分。
假定希望将下述的URI 分解为协议 (ftp,http,etc),域名地址以及页面/路径:http://msdn.microsoft.com:80/scripting/default.htm
示例: 6、元字符
元字符(Metacharacter)是拥有特殊含义的字符。从功能上分为:限定符、选择匹配符、分组组合和后向引用符、特殊字符、字符匹配符、定位符
6.1限定符{n}、{n,m}、+、*、?6.1.1{n}用于指定其前面的字符和组合项连续出现多少次。
n表示出现的次数,如:a{3},1{2},(d){5}
6.1.2 {n,m}表示,至少出现n次,最多m次。如:a{1,3},1{2,5},(d){2,4}示例: <script type="text/javascript"> var str = "3243332433443543333333不复还!"; var strRule = /3{2,4}/gi; //注意这里要加g,不然下面会出现死循环,原理跟EXEC的使用方法有关 while(res=strRule.exec(str)){ document.write(res[0]+"<br />"); } </script> 注意:JS在默认匹配中使用的是贪婪匹配的原则,即尽可能匹配多的字符串。如上例中匹配汉字前面的7个数字3时,会先匹配4个数字3,再匹配3个。
|