正则表达式(RegExp)是Regular Expression缩写,是用于查找符合某些规则的字符串的工具。
正则表达式是一个描述字符模式的对象,当检索某个文本时,可以使用一种模式来描述要检索的内容,RegExp 就是这种模式。
正则的创建
在js中正则的创建有两种:
- 构造函数
- 字面量
// 构造函数式
// var reg=new RegExp(pattern,attribute);
var reg1 = new RegExp('a','i');
// 字面量式
// var reg=/pattern/attribute;
var reg2 = /a/i;
上面两种创建方式所表达的内容是一致的,都是匹配字符串中的'a',并且是忽略大小写的。
pattern:匹配模式。
attribute:匹配特征。
正则对象的属性和方法
上面我们仅仅只是得到一个正则对象,还不能做任何事情,例如对字符串的校验等。
正则对象的属性
- global:全局的,对应修饰符 g
- ignoreCase:忽略大小写,对应修饰符i
- multiline:多行,对应修饰符m
- lastIndex:下一次匹配的字符位置
正则对象的方法
- test():测试方法,用于测试一个字符串是否符合正则表达式对象所指定的模式规则,返回true或false
- exec():搜索方法,用于在字符串中查找符合正则表达式对象所指定的模式的子字符串,返回找到的结果,若找不到则返回null
var str="Hela24lo Wor7A.l8ad!";
//判断是否包含字母a或A
var reg=/a/ig;
// 测试
console.log(reg.test(str));// true
//g表示全局匹配,会查找匹配多个符合条件的结果
console.log(reg.exec(str));
console.log(reg.lastIndex);
上面代码中,对于test方法的使用很容易理解。exec()方法配合"g"可以用来在符串多次匹配符合条件的内容,我们可以使用它来轻易的完成一个指定的字符串在大字符串中出现的次数。
function getStrCount(bigStr,smallStr){
var count = 0;
var reg = new RegExp(smallStr,'g');
while(true){
var result=reg.exec(bigStr);
if(result!=null){
count++;
}else{
return count;
}
}
}
匹配模式pattern
在正则中匹配模式pattern是整个正则表达式的灵魂,同样它也是正则表达式中最复杂的部分。 在匹配模式中我们需要学习三个部分:
- 元字符:具有特殊含义的字符
- 量词:指定字符出现的次数
- 特殊符号:具有特定含义的符号
元字符
- \s:匹配任何的空白字符
- \S:任何非空白字符
- \d:匹配一个数字字符,等价于[0-9]
- \D:除了数字之外的任何字符,等价于
[^0-9] - \w:匹配一个数字、下划线或字母字符,等价于[A-Za-z0-9_]
- \W:任何非单字字符,等价于
[^a-zA-z0-9_] - .:匹配除了换行符之外的任意字符
量词
- {n}:匹配前一项n次
- {n,}:匹配前一项至少n次
- {n,m}:匹配前一项至少n次最多m次
- *****:匹配前一项至少0次最多无数次,{0,}
- +:匹配前一项至少1次最多无数次,{1,}
- ?:匹配前一项最多1次,{0,1}
特殊符号
- /.../:代表一个模式的开始和结束
- ^:匹配字符串的开始,即表示行的开始
- $:匹配字符串的结束,即表示行的结束
[ ]:表示可匹配的列表- ( ):用于分组
- |:表示或者
- [^ ]:在[ ]中的尖括号表示非
string对象的正则方法
- match
- search
- replace
- split