正则表达式(二)

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"的数字,例子中的\1\2,这些数字是跟小括号的个数相关
	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)\\2\\1","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)\2\2(\d)\3\3(\d)\4\4/gi;
	//var strRule3 = /(\d){5}-((\d)\2\2){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个。
6.1.3 +表示出现一次到任意多次,如:/a+/gi,/1+/gi,/{\d}+/gi
示例:
<script type="text/javascript">
	var str = "3243332433443543333333不复还!";
	var strRule = /3+/gi;       //注意这里要加g,不然下面会出现死循环,原理跟EXEC的使用方法有关,参看上面EXEC方法部分。
	while(res=strRule.exec(str)){
		document.write(res[0]+"<br />");
	}
</script>
6.1.4 *表示出现0到任意多次,如/ba*/gi,/10*/gi,/y{\d}*/gi
示例:
<script type="text/javascript">
	var str = "3243332433443543333333不复还!";
	var strRule = /43*/gi;       //注意这里不要用单个数字或字符去匹配,如/3*/gi,这样会造成死循环,因为从第二次匹配往后,指针到了最后虽然没有东西了,但还是符合0到多个3这个条件,所以会一直匹配下去。并且只用一个数字或字符加*去匹配没有任何实际意义。
	while(res=strRule.exec(str)){
		document.write(res[0]+"<br />");
	}
</script>
6.1.5 ?表示出现0到1次
示例:
<script type="text/javascript">
	var str = "3243332433443543333333不复还!";
	var strRule = /4(43)?/gi;       
	//varstrRule = /(43)?/gi;                  //这里是错误的用法,会死循环!注意只要涉及到从0次开始计算次数的匹配都会出现死循环的问题,原因参看上面限定符*的部分内容。
	while(res=strRule.exec(str)){
		alert(res[0]);
	}
</script>

6.2 字符匹配符

[abc] 查找方括号之间的任何字符。 
[^abc] 查找任何不在方括号之间的字符。 
[0-9] 查找任何从 0 至 9 的数字。 
[a-z] 查找任何从小写 a 到小写 z 的字符。 
[A-Z] 查找任何从大写 A 到大写 Z 的字符。 
[a-Z] 查找任何从小写 a 到大写 Z 的字符。 
[adgk] 查找给定集合内的任何字符。 
[^adgk] 查找给定集合外的任何字符。 
[red|blue|green] 查找任何指定的选项。 
.(这个是英文句号) 查找单个字符,除了换行和行结束符。 
\w 查找单词字符。 
\W 查找非单词字符。 
\d 查找数字。 
\D 查找非数字字符。 
\s 查找空白字符。 
\S 查找非空白字符。 
\b 查找位于单词的开头或结尾的匹配。 
\B 查找不处在单词的开头或结尾的匹配。 
\0 查找 NUL 字符。 
\n 查找换行符。 
\f 查找换页符。 
\r 查找回车符。 
\t 查找制表符。 
\v 查找垂直制表符。 
\xxx 查找以八进制数 xxx 规定的字符。 
\xdd 查找以十六进制数 dd 规定的字符。 
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。 
示例:
<script type="text/javascript">
	var str = "3243332433443543333333不复还!";
	var strRule = /[4-5]\d?/gi;       
	while(res=strRule.exec(str)){
		alert(res[0]+"<br />");
	}
</script>

6.3 转义字符\

需要使用转义字符进行转义的字符如下:
. * + ( ) $ / \ ? [ ] ^ { }

6.4 定位符^、$

n$ 匹配任何结尾为 n 的字符串。 
^n 匹配任何开头为 n 的字符串 。

6.5 选择匹配符 |

x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值