JavaScript中的正则表达式
在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp对象,也可以用JavaScript 1.2中的新添加的一个特殊语法来创建RegExp对象.
就像字符串直接量被定义为包含在引号内的字符一样,正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符.所以,JavaScript可能会包含如下的代码:
var pattern = /s$/;
这行代码创建一个新的RegExp对象,并将它赋给变量parttern.这个特殊的RegExp对象和所有以字母"s"结尾的字符串都匹配.用RegExp()也可以定义一个等价的正则表达式,代码如下:
var pattern = new RegExp("s$");
提示和注释
重要事项:不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。
提示:如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0
示例,下面的例子举例说明了 test 方法的用法,代码如下:
- <script language=jscript>
- function TestDemo(){
- try{
- var re="abc"
- var s=/a/
- //这里设正则表达式
- alert(s.test(re)) //如果包含则返回真
- }catch(e){alert("err")}
- }
- TestDemo()
- </script>
例,代码如下:
- <script type='text/javascript'>
- var reTest = /^aid=(.*)/ig;
- var aData = [ 'aid=^$', 'aid=^$', 'aid=^$', 'aid=^$' ];
- for (var i=0, l=aData.length; i<l; i++) {
- reTest.lastIndex = 0;
- alert(reTest.test(aData[i]));
- }
- </script>
这样,结果就对了~, 当然另外, moxie同学说的方法其实更有效, 既然你不需要g, 那何必设置g呢?代码如下:
- <script type='text/javascript'>
- var reTest = /^aid=(.*)/i;
- var aData = [ 'aid=^$', 'aid=^$', 'aid=^$', 'aid=^$' ];
- for (var i=0, l=aData.length; i<l; i++) {
- alert(reTest.test(aData[i]));
- }
- </script>< li>
实例代码如下:
- //test方法,测试字符串,符合模式时返回true,否则返回false
- var re = /he/;//最简单的正则表达式,将匹配he这个单词
- var str = "he";
- alert(re.test(str));//true
- str = "we";
- alert(re.test(str));//false
- str = "HE";
- alert(re.test(str));//false,大写,如果要大小写都匹配可以指定i标志(i是ignoreCase或case-insensitive的表示)
- re = /he/i;
- alert(re.test(str));//true
- str = "Certainly!He loves her!";
- alert(re.test(str));//true,只要包含he(HE)就符合,如果要只是he或HE,不能有其它字符,则可使用^和$
- re = /^he/i;//脱字符(^)代表字符开始位置
- alert(re.test(str));//false,因为he不在str最开始
- str = "He is a good boy!";
- alert(re.test(str));//true,He是字符开始位置,还需要使用$
- re = /^he$/i;//$表示字符结束位置
- alert(re.test(str));//false
- str = "He";
- alert(re.test(str));//true
- //当然,这样不能发现正则表达式有多强大,因为我们完全可以在上面的例子中使用==或indexOf
- re = /s/;// s匹配任何空白字符,包括空格、制表符、换页符等等
- str= "user Name";//用户名包含空格
- alert(re.test(str));//true
- str = "user Name";//用户名包含制表符
- alert(re.test(str));//true
- re=/^[a-z]/i;//[]匹配指定范围内的任意字符,这里将匹配英文字母,不区分大小写
- str="variableName";//变量名必须以字母开头
- alert(re.test(str));//true
- str="123abc";
- alert(re.test(str));//false
正则表达式的直接量字符
字符 匹配
________________________________
字母数字字符 自身
f 换页符
n 换行符
r 回车
t 制表符
v 垂直制表符
/ 一个 / 直接量
一个 直接量
. 一个 . 直接量
* 一个 * 直接量
+ 一个 + 直接量
? 一个 ? 直接量
| 一个 | 直接量
( 一个 ( 直接量
) 一个 ) 直接量
[ 一个 [ 直接量
] 一个 ] 直接量
{ 一个 { 直接量
} 一个 } 直接量
XXX 由十进制数 XXX 指 定的ASCII码字符
Xnn 由十六进制数 nn 指定的ASCII码字符
cX 控制字符^X. 例如, cI等价于 t, cJ等价于 n
字符 匹配
____________________________________________________
[...] 位于括号之内的任意字符
[^...] 不在括号之中的任意字符
. 除了换行符之外的任意字符,等价于[^n]
w 任何单字字符, 等价于[a-zA-Z0-9]
W 任何非单字字符,等价于[^a-zA-Z0-9]
s 任何空白符,等价于[ t n r f v]
S 任何非空白符,等价于[^ t n r f v]
d 任何数字,等价于[0-9]
D 除了数字之外的任何字符,等价于[^0-9]
[b] 一个退格直接量(特例)
字符 含义
__________________________________________________________________
{n, m} 匹配前一项至少n次,但是不能超过m次
{n, } 匹配前一项n次,或者多次
{n} 匹配前一项恰好n次
? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1}
+ 匹配前一项1次或多次,等价于{1,}
* 匹配前一项0次或多次.等价于{0,}