1、正则表达式(regular expression):描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
2、正则对象
要使用正则表达式,必须要在程序中创建正则对象
如何创建正则对象?我们需要得到一个RegExp类的实例
1)、隐式创建
var 对象=/匹配模式/匹配标志;
var reg=/\d/gi;
alert(typeof reg);
alert(reg.constructor);
2)、直接实例化
var 对象=new RegExp("匹配模式","匹配标志");
var reg=RegExp("abcd",'gi');
alert(typeof reg);
alert(reg.constructor);
var reg=/\d/gi;
如果使用直接实例化,那么像“\d”这样字符,需要转义“\\d”,如下
var reg=new RegExp("\\d","gi");
3、正则表达式匹配标志
g:全局匹配(遇到第一个匹配成功后不停止,直到最后)
i:忽略大小写
4、如何使用正则对象
在js中使用正则对象主要有两种用法:
1)、RegExp类
test(str):匹配指定的模式是否出现在字符串中,返回true或false
reg.test(str);
exec(str):返回匹配模式的字符串
reg.exec(str);
compile() :用于改变RegExp,既可以改变检索模式,也可以添加或删除第二个参数。
2)、String类
search:匹配符合匹配模式的字符串出现的位置
str.search(reg);
match:以数组形式返回匹配模式的字符串,没有匹配到返回null
str.match(reg);
replace:使用指定的内容替换匹配模式的字符串
str.replace(reg,"content");
split:使用匹配模式的字符串作为分隔符对字符串进行分割,返回数组
str.split(reg);
5、正则式子表达式:在正则匹配模式中,使用一对括号括起来的内容是一个子表达式
捕获:在正则匹配模式中,子表达式匹配到的内容会被系统捕获至系统的缓冲区中
反向引用:捕获之后。可以在匹配模式中,使用\n(n:数字)来引用系统的第n号缓冲区内容
例题:匹配多个字符后面是三个数字,后面的内容和前面多个字符相同。
abc123abc reg=/(\w+)\d\d\d\1/gi;
6、习题
1)、查找连续的四个数字,如:3569
reg=/\d\d\d\d/gi; reg=/\d{4}/gi;
2)、查找连续相同的四个数字,如:1111
reg=/(\d)\1\1\1/gi; reg=/(\d)\1{3}/gi;
3)、查找数字,如:1221,3443
reg=/(\d)(\d)\2\1/gi;
4)、查找字符,如:AABB,TTMM
reg=/(\w)\1(\w)\2/gi;
5)、查找连续相同的四个数字或四个字符
reg=/(\w)\1\1\1/gi; reg=/(\w)\1{3}/gi;
6)、在一个字符串中查找一对html标记以及中间内容:"aaa<div>商品</div>sss<p>100.00</p>dfdf<span></span>cv"
reg=/<(\w+)>.*<\/\1>/gi;
7、关于子表达式和exec方法
var str='aaaphp123phpaaajavascript234javascriptaasma789smbaa';
var reg=/(\w+)(\d)\d\d\1/gi;
var result;
while(result=reg.exec(str)){
alert(result);
}
//每一次匹配都放到一个数组中
//数组结构:
//result[0] ===> php123php
//result[1] ===> 第一个子表达式匹配结果php
//result[2] ===> 第二个子表达式匹配结果
//result[0] ===> javascript234javascript
//result[1] ===> javascript
//result[2] ===> 5
exec方法和match方法比较
1)、exec方法是RegExp类下的方法
match是String下方法
2)、match方法直接返回一个数组
exec方法需要使用循环反复调用
3)、如果有子表达式,exec方法会将子表达式的捕获结果放到数组对应的数组元素中
8、正则表达式语法细节
正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与搜索的字符串进行匹配。
1)、普通字符:a b c d 1 2 3 4 ......
2)、特殊字符(元字符):\d \D \w . ......
3)、限定符:指正则表达式的一个给定组件必须要出现多少次才能满足匹配。
* 匹配前面的子表达式零次或多次 也可以:{0,}
+ 匹配前面的子表达式一次或多次 也可以:{1,}
? 匹配前面的子表达式零次或一次 也可以:{0,1}
{n} 匹配确定的n次
{n,} 至少匹配n次
{n,m} 最少匹配n次且最多匹配m次
注意:\d{3,5} 在字符串中,既匹配三个,也可匹配五个,那么正则表达式中会自动匹配多的那一种,这在正则中贪婪匹配原则。
如果在表达式后面使用“?”,表示非贪婪匹配原则。
9、字符匹配符:用于匹配某个或某些字符([]表示字符簇)
[a-z] 表示a-z任意一个字符
[A-Z] 表示A-Z任意一个字符
[0-9] 表示0-9人一个数字
[0-9a-z] 表示0-9 a-z人一个字符
[0-9a-zA-Z] 表示0-9 a-z A-Z人一个字符
[abcd] 表示a或b或c或d
[1234] 表示1或2或3或4
[^a-z] 表示除了a-z之间任意一个字符
[^0-9] 表示除了0-9之间任意一个字符
[^abcd] 表示除了a或b或c或d之外任意字符
\d 匹配一个数字字符 也可以[0-9]
\D 匹配一个非数字字符 也可以[^0-9]
\w 匹配包括下划线的任何单词字符 也可以[0-9a-zA-Z_ ]
\W 匹配任何非单词字符 也可以[^\w]
\s 匹配任何空白字符(空格、制表符、换行符)
\S 匹配任何非空白字符
. 匹配除“\n”之外的任何单个字符
10、定位符:可以将一个正则表达式固定在一行的开始或结束,也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
\b 匹配一个单词边界
\B 匹配非单词边界
11、转义字符 “\” 用于匹配某些特殊字符
需要转义的字符:()、[]、{}、\、.、/、*、+、?、^、$ 等
12、选择匹配符 “|” 可以匹配多个规则
13、关于正则表达式的几种特殊用法
1)、(?=) 正向预查
2)、(?!) 负向预查
3)、(?:) 结果不被捕获
14、str.replace(reg,'$1');使用1号缓冲区重复的内容。