定义:
正则表达式(regular expression, 缩写为RegExp)是一个描述字符模式的对象,主要用来验证客户端的输入数据。
正则表达式的作用:
1.查找功能:判断一个模式在目标字符串中出现的次数,在目标字符串中的位置。 2.匹配功能:判断目标字符串是否符合一个模式。
【1】创建:
和创建字符串类似,有两种方法
(1)是采用new运算符
(2)是采用字面量字式。(常用)
【2】怎样匹配正则表达式
RegExp()对象有两个常用的方法:
作用:匹配str中是否存在pattern
(1)test()
box.test(“目标字符串”); //判断目标字符串是否与模式匹配,返回布尔值,匹配成功返回true,匹配失败返回false。
(2)exec()
box.exec(“目标字符串”); //返回的是数组,数组第一个元素为匹配到的整个字符串,第二个元素为第一个分组向匹配的内容,有就返回数组的值,没有就返回Null
pattern----------模式
【3】使用字符串的正则表达式的方法
String对象提供了4个使用正则表达式的方法:
1、match(pattern) ------------查找
2、replace(patternReg,"Tom") ------------替换(模式,需要替换的字符串“Tom”)
3、search(pattern) --------------查找匹配的位置在哪,找不到返回-1
4、split(pattern) ---------------拆分成数组,比如按照!来划分,或者按空格来划分
正则表达式中的元字符和元符号
(1) 使用点元字符
.
点符号表示匹配除换行符外的任意字符
var pattern=/g.gle/; var str="gogle"; alert(pattern.test(str));
(2)重复匹配
o*
var pattern=/go*gle/; //o *表示0个,一个或多个o
var str='google';
alert(pattern.test(str));
o+
var pattern=/go+gle/; //o *表示一个或多个o
var str='google';
alert(pattern.test(str));
o?
var pattern=/go?gle/; //o ?表示0个或1个o
var str='gogle';
alert(pattern.test(str));
.?
var pattern=/go.?gle/; //.?表示0个或1个任意字符
var str='gogle';
alert(pattern.test(str));
o{2,4}
var pattern=/go{2,4}gle/; //o{2,4} 表示匹配o 2-4次,包含2-4个O都可以
var str='google'; //O{3}只有三个o
alert(pattern.test(str)); //o{3,}表示3个以上的o
(3)字符类匹配
[a-z]
var pattern=/[a-z]oogle/; //表示出现[a-z]之间的都匹配
var str='google';
alert(pattern.test(str));
[0-9]
var pattern=/[0-9]oogle/; //表示出现[0-9]之间的都匹配
var str='4oogle';
alert(pattern.test(str));
[0-9a-zA-Z] ------复合式的
var pattern=/[0-9a-zA-Z]oogle/; //表示出现[0-9a-zA-Z]之间的都匹配
var str='4oogle';
alert(pattern.test(str));
[^0-9]
var pattern=/[ ^ 0-9]oogle/; //表示非[0-9]之间的都匹配
var str='4oogle';
alert(pattern.test(str));
(3)锚元字符匹配
^
反斜杠后放一个^ ^ 表示行首,强制首匹配 ,$结尾,强制尾匹配
var pattern=/^[ 0-9]oogle$/; //一个对着一个匹配
var str='4oogle';
alert(pattern.test(str));
\w
var pattern=/\woogle/; //字母数字下划线相当于[0-9a-zA-Z_ ]
var str='4oogle';
alert(pattern.test(str));
\W
var pattern=/\Woogle/; //表示非字母数字下划线
var str='4oogle';
alert(pattern.test(str));
\d
var pattern=/\doogle/; //表示0-9
var str='4oogle';
alert(pattern.test(str));
\D
var pattern=/\Doogle/; //表示非0-9之间
var str='4oogle';
alert(pattern.test(str));
\s
var pattern=/go\sogle/; // \s表示匹配一个空格
var str='go ogle';
alert(pattern.test(str));
\b
var pattern=/google\b/; // \b表示是否到达边界
var str='google';
alert(pattern.test(str));
(4)使用或模式匹配
var pattern=/google|baidu|bing/; // |表示匹配或选择模式
var str='google'; //匹配不等于相等,是一种包含的想法
alert(pattern.test(str));
(5)使用分组模式匹配
e{4,8}
var pattern=/(google){4,8}$/; // e 4-8次
var str='googleeeee';
alert(pattern.test(str));
(Google){4,8}
var pattern=/(Google){4,8}$/; // 分组可以看成一个字符,表示Google4-8次
var str=' Google Google Google Google Google';
alert(pattern.test(str));
(.*)
var pattern=/8(.*)8/; //表示匹配8和8之间任意的数
var str='This is a 8google8';
pattern.test(str); //不管用什么方式,一定要运行一下
alert(RegExp.$1); //$1表示获取模式中第一个分组对应的匹配字符
替换
var pattern=/8(.*)8/; //表示匹配8和8之间任意的数
var str='This is a 8google8';
document.write(replace(pattern,'< strong >$1< strong>')) ;//$1表示获取模式中第一个分组对应的匹配字符
两组替换输出
var pattern=/( .*)\s(. *)/; //将baidu和google替换输出
var str='google baidu';
alert(str.replace(pattern,'$1 $2'));
贪婪和惰性
贪婪模式——在匹配成功的前提下,尽可能多的去匹配
惰性模式——在匹配成功的前提下,尽可能少的去匹配
把问号去掉即为贪婪限定符
(6)exec返回数组
捕获性分组 var pattern=/(\d+)([a-z])/; var str="123abc"; alert(pattern.exec(str)); //123a,123,a var a=pattern.exec(str); alert(a[0]); //返回123a alert(a[1]); //返回123 alert(a[2]); //返回a
?:
非捕获性分组
在分组前加上?:,就不会捕获到该分组的内容
var pattern=/(\d+)(?:[a-z])/; var str="123abc"; alert(pattern.exec(str)); //123a,123
嵌套分组
从外往内获取
var pattern=/(a?(b?(c?)))/; var str="abc"; alert(pattern.exec(str)); var a=pattern.exec(str); alert(a[0]); //整个匹配到的字符串 alert(a[1]); //匹配第一个分组 alert(a[2]); //匹配第二个分组 alert(a[3]); //匹配到第三个分组
?=
前瞻捕获
var pattern=/goo(?=gle)/; //goo后边必须是gle才能返回goo,这里一定要注意,返回的是goo,不是google var str="google"; alert(pattern.exec(str)); //返回goo
\
用转义字符完成特殊字符匹配
var pattern=/\[/; var str="["; alert(pattern.test(str));
换行
限定了首匹配并且开启换行模式
var pattern=/^\d+$/gm; / /限定了首匹配^,必须开启换行模式 var str="1.baidu\n2.google\n3.bing"; alert(str.replace(pattern,'#'));