1、正则表达式
(1)定义:描述字符模式的对象
ECMAScript的RegExp类表示正则表达式
(2)作用:验证客户端的输入函数,即在用户填写完表单单击按钮后,表单被发送到服务器,在服务器端通 常用php,asp.net语言对其进行进一步的验证。
2、创建正则表达式(2种)
(1)new关键字
(2)采用字面量方式(打印出来的为字面量)
var box=new RegExp('Box'); //第一个参数是模式字符串;
alert(box); //结果——"/Box/"
//两个反斜杠就是正则表达式字面量表示方法;
var box=new RegExp('Box','gi'); //第二个参数为可选;
alert(box);
(3)模式修饰符(可选参数)
a、i——忽略大小写
b、g——全局匹配
c、m——多行匹配
var box='/Box/';
alert(box);
3、测试正则表达式
A、RegExp
2种:test()/exec()
结果——均返回布尔值true、false
(1)test():用于匹配字符串
var pattern=new RegExp('Box'); //模式;
var str='box';
alert(pattern.test(str));
结果:false,由于大小写不一致
var pattern=new RegExp('Box','i'); //不区分大小写;
var str='box';
alert(pattern.test(str));
结果:true,一句话匹配
var pattern=/Box/i; //使用字面量方式
var str='box';
alert(pattern.test(str));
结果:true
(2)exec():用于匹配数组
(若匹配到,则返回数组;若没匹配到,返回null)
var pattern=/Box/i; //使用字面量方式
var str='sss';
alert(pattern.test(str));
结果:如果没匹配到,返回null
B、String对象
4种:match()——返回pattern中子串或null
replace()——用新元素替换旧元素
search()——返回字符串中开始的位置
split()——返回字符串按指定pattern拆分的数组
(1)match()获取数组
a、ig:全局
var pattern=/Box/ig; //全局搜索;
var str='This is a Box!This is a Box!';
alert(str.match(pattern)); //将所有匹配到的字符串组合成数组返回;
b、i:不是全局
var pattern=/Box/i; //没有开启全局搜索;
var str='This is a Box!This is a Box!';
alert(str.match(pattern)); //匹配到第一个字符串返回数组;
(2)search查找匹配数组
var pattern=/xox/i; //没有开启全局搜索;
var str='This is a Box!This is a Box!';
alert(str.search(pattern)); //找不到匹配,返回-1;
(3)replace替换数组
var pattern=/Box/i; //没有开启全局搜索;
var str='This is a Box!This is a Box!';
alert(str.replace(pattern,'Tom')); //返回替换的字符串,只替换了第一个;
var pattern=/Box/ig; //全局搜索;
var str='This is a Box!This is a Box!';
alert(str.replace(pattern,'Tom')); //返回替换的字符串,替换了两个;
(4)split表示拆分数组
4、RegExp属性
(1)静态属性
var pattern=/(g)oogle/;
var str='This is google';
pattern.test(str); //执行一下;
alert(RegExp.input); //This is google!
alert(RegExp.leftContext); //This is
alert(RegExp.rightContext); //!
alert(RegExp.lastMatch); //goole;(匹配最后一个)
alert(RegExp.lastParen); //g
(2)实例属性
google:全局ignoreCase:区分大小写
lastIndex:上次匹配位置
var pattern=/google/ig;
alert(pattern.global); //true,是否全局了;
alert(pattern.ignoreCase); //true,是否忽略大小写;
alert(pattern.mulyiline); //false,是否换行;
alert(pattern.lastIndex); //0,下次匹配位置;
alert(pattern.source);//google,原字符串;
5、获取控制
(1)定义:正则表达式中的元字符是包含特殊含义的字符。
(2)元字符可以控制匹配模式的方式,反斜杠后的元字符将失去其特殊含义
a、字符类
(1)单个字符或数字
.:点符号表示匹配除换行符外的任意字符
var pattern=/g..gle/;
var str='google';
alert(pattern.test(str));
(2)重复字符
x*:星号*表示前边那个字符x重复的0个或多个
x+:星号+表示前边那个字符x重复的1个或多个
x.?:问号.?表示前边的字符x重复的0个或1个
x{a,b}:{a,b}表示匹配前边的字符x重复(a,b)次
var pattern=/go{2,4}gle/;
var str='gooole';
alert(pattern.test(str)); //true
var pattern=/go{3}gle/; //o{3}表示限定为3个
var str='goooole';
alert(pattern.test(str)); //true
var pattern=/go{3,}gle/; //o{3,}表示限定为3个及3个以上
var str='goooole';
alert(pattern.test(str)); //true
(3)单个字符
[a-z]:表示26个小写字母,任意一个都可以匹配
[A-Z]:表示26个大写字母,任意一个都可以匹配
(注意://i有i时,不限定大小写,为true)
var pattern=/[a-z]oogle/i; //[a-z]表示匹配小写,有i后缀表示可不区分大小写
var str='Goole';
alert(pattern.test(str)); //true,大写G,由于有后缀i
var pattern=/[a-zA-Z0-9]oogle/;
var str='google';
alert(pattern.test(str)); //true
var pattern=/[0-9]oogle/; //[0-9]表示匹配数字0-9
var str='6oole';
alert(pattern.test(str)); //true
var pattern=/[^0-9*]oogle/; //[^0-9*]表示匹配任意个非数字0-9
var str='google';
alert(pattern.test(str)); //true
var pattern=/[a-zA-Z0-9]oogle/;
var str='google';
alert(pattern.test(str)); //true
组合类型3——/^[a-z]oole[0-9]$/表示以a-z开头,以0-9结尾
var pattern=/^[a-z]oole[0-9]$/;
var str='google';
alert(pattern.test(str)); //true
d、元字符
var pattern=/google{4,8}$/; //表示e重复4-8次
var str='googleeeee';
alert(pattern.test(str));
var pattern=/(google){4,8}$/; //分组,将google看成一个字符;
var str='googlegooglegooglegoogle';
alert(pattern.test()); //true
var pattern=/8(.*)8/;
var str='This is a 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'));
var pattern=/[a-z]+/; //+号表示使用了贪婪模式;
var str='asdf';
alert(pattern.test(str)); //所有字符串都变成了1;
var pattern=/[a-z]+?/; //+?号表示使用了惰性模式;
var str='asdf';
alert(pattern.test(str)); //只有第一个字符串都变成了1;
var pattern=/8(.*)8/;
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'));
结果:<strong>google8 8google8 8google</strong>
var pattern=/8(.*?)8/; //运用了惰性
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'));
结果:<strong>google</strong>