一、字符串的match()方法--正确理解
?
1、在javascript中,字符串可以调用match()方法来匹配字符串。
误区1:这里的match()方法和java中的matches()方法时完全不同的。
在java中是完全匹配,也就是匹配的字符串必须是整个都满足正则表达式。
但是:javascript中的match()是匹配子串,也就是该字符中,有满足正则表达式的就可以。
看代码:
?误区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