首页 > 编程语言 > 详细

正确理解--javascript中的正则表达式-您有多少误区?和表单验证

时间:2014-11-13 02:09:16      阅读:293      评论:0      收藏:0      [点我收藏+]

一、字符串的match()方法--正确理解

?

1、在javascript中,字符串可以调用match()方法来匹配字符串。

误区1:这里的match()方法和java中的matches()方法时完全不同的。

在java中是完全匹配,也就是匹配的字符串必须是整个都满足正则表达式。

但是:javascript中的match()是匹配子串,也就是该字符中,有满足正则表达式的就可以。

看代码:

<html>
<head>
<title>正则表达式</title>
<meta http-equiv="content-type" content="charset=gbk">
<script type="text/javascript">
var srt="1234562347";
var s=srt.match(‘234‘);
//如果整个匹配就不满足,但是匹配字串就满足
document.write(s);
</script>
</head>

<body>
</body>
</html>

?误区2:match()返回的是存放匹配结果的数组,而不是字符串,该数组元素就是匹配的子串,匹配到的话大小就为1

? var s=srt.match(‘234‘);

s是数组,打印他的长度可以知道是1,注意,如果我们直接输出一个数组,也是可以的他会将里面的元素用

,隔开,当只有一个元素的时候也就是没有,了。

注意:虽然它是匹配字串,但是他也是懒惰的,只会返回第一个匹配的字符串,

????????? 我们可以通过查看数组的大小和元素来验证,下面的代码中,字符串有两个子字符串满足,但是返回的数组长度还是1。

看代码:

<html>
<head>
<title>正则表达式</title>
<meta http-equiv="content-type" content="charset=gbk">
<script type="text/javascript">
var srt="1234234567";
var s=srt.match(‘234‘);
//如果整个匹配就不满足,但是匹配字串就满足
document.write(s.length+"<br/>");
document.write(s+"<br/>");

</script>
</head>

<body>
</body>

误区3、表单验证

有了上面的理解,我们在做表单验证的时候,需要匹配整个字符串是不是满足?但是我们又没有整个匹配的方法,注意javascript没有提供全局匹配的方法。

我们得到匹配的子符串,这个时候拿来和原来的整个字符串比较,如果是相等,那么就满足,这里需要注意返回的变量是个数组,如果去比较返回值的长度和原来字符串的长度是不合理的。?

?

如果我们要得到所有满足的子串怎么办呢?下面介绍正则表达式对象。

?

二、正则表达式对象。

1、对象实例化的语法。

new RegExp(pattern, attributes);

参数

?

参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

?

参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

?

返回值

?

一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。

?

如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。

?

?

2、方法

方法 描述 ? ?
compile 编译正则表达式。 ? ?
exec 检索字符串中指定的值。返回找到的值,并确定其位置。 ? ?
test 检索字符串中指定的值。返回 true 或 false。 ? ?

?

主要介绍exec()方法误区:

其实这里的 exec()? 方法和上面将的match()方法他的执行是一样的,也是懒惰的也只会执行一次,返回值

也是一个数组。

特点: RegExpObject 的 lastIndex 属性

正则表达式对象有lastIndex 属性,他保留了匹配到的字符串在它原来自己字符串中的位置,当这个正则表达式对象再一次调用exec() 方法的时候,该方法就会从这个位置之后去查找,如果没有匹配的就会返回null

?

解决问题:现在就可以得到所有满足的子串了。

看代码:

<html>
<head>
<meta http-equiv="content-type" content="charset=gbk">
<title>正则表达式 </title>
<script type="text/javascript">
//语法new RegExp(pattern, attributes);
var reg= new RegExp(‘\\b\\d{1,3}\\b‘,‘g‘);

var array= new Array();
var i=0;
//这里有三个满足的子串
array[0]=reg.exec(‘11 222 1‘);

while(array[i]!=null){
i++;
array[i]=reg.exec(‘11 222 1‘);

}
document.write("数组"+array+"<br/>");
</script>

</head>

<body>

</body>

</html>

?

?

?

?

正确理解--javascript中的正则表达式-您有多少误区?和表单验证

原文:http://376798041.iteye.com/blog/2155151

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!