日期:2014-05-16  浏览次数:20423 次

JS的正则表达式(三)

边界与非边界\b表示的边界的意思,也就是说,只有字符串的开头和结尾才算数。例如/\bc/就表示字符串开始的c或者是结尾的c。看下面的例子:

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\bc/;
		str='crazy';
		execReg(reg,str);
</script>

?返回结果c。匹配到了左边界的c字符。

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\bc/;
		str='维生素c';
		execReg(reg,str);
</script>

?仍然返回c,不过这次返回的是右侧边界的c。

?

reg = /\bc/;
str='bcb';
execReg(reg,str);
?

这次匹配失败,因为bcb字符串中的c被夹在中间,既不在左边界也不再右边界。

与\b对应\B表示非边界。例如:

reg = /\Bc/;
str='bcb';
execReg(reg,str);

?这次会成功地匹配到bcb中的c。然而

\B值匹配非边界

?

数字与非数字

\d表示数字的意思,相反,\D表示非数字。例如:

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\d/;
		str='crazy8';
		execReg(reg,str)
</script>

?返回的匹配结果为8,因为它是第一个数字字符。

reg = /\D/;
str='crazy8';
execReg(reg,str);

?返回c,第一个非数字字符。

空白

\f匹配换页符,\n匹配换行符,\r匹配回车,\t匹配制表符,\v匹配垂直制表符。

\s匹配单个空格,等同于[\f\n\r\t\v]。例如:

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\s.+/;
		str='This is a test  String.';
		execReg(reg,str);
</script>

?返回“is a test String.”,正则的意思是匹配第一个空格以及其后的所有非换行字符。

同样,\S表示非空格字符。

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\S+/;
		str='This is a test  String.';
		execReg(reg,str);
</script>

?匹配结果为This,当遇到第一个空格之后,正则就停止匹配了。

?

单词字符

\w表示单词字符,等同于字符集合[a-zA-Z0-9_]。例如:

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\w+/;
		str='blueidea';
		execReg(reg,str);
</script>

?返回完整的blueidea字符串,因为所有字符都是单词字符。

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\w+/;
		str='.className';
		execReg(reg,str);
</script>

?结果显示匹配了字符串中的className,只有第一个“.”——唯一的非单词字符没有匹配。

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\w+/;
		str='中文如何?';
		execReg(reg,str);
</script>
?

试图用单词字符去匹配中文自然行不通了,返回null。

\W表示非单词字符,等效于[^a-zA-Z0-9_]

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\W+/;
		str='中文如何?';
		execReg(reg,str);
</script>

?返回完整的字符串,因为,无论是中文和“?”都算作是非单词字符。

?

反向引用

形式如下:/(子正则表达式)\1/

依旧用例子来说明:

1.

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /\w/;
		str='crazygrass';
		execReg(reg,str);
</script>
?

返回b。

2.

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /(\w)(\w)/;
		str='crazygrass';
		execReg(reg,str);
</script>

?返回结果:cr,c,r

cr是整个正则匹配的内容,c是第一个括号里的子正则表达式匹配的内容,r是第二个括号匹配的内容。

3.

<script  type="text/javascript">
	function execReg(reg,str){
			var result = reg.exec(str);
			alert(result);
		}
		reg = /(\w)\1/;
		str='crazygrass';
		execReg(reg,st