一.正则表达式介绍
正则表达式(Regular Expression)是一个描述字符模式的对象,用于对字符串进行匹配,一般用在有规律的字符串匹配中;常用于表单验证。
创建正则表达式有两种方式:
1.使用new
var box = new RegExp("box"); //传入非空字符串
console.log(box); // /box/
console.log(typeof box); //object
var box = new RegExp("box", "gi"); //第二个参数是模式修饰符
console.log(box); // /box/gi
2.采用字面量方式
var box = /box/;
console.log(box); // /box/
console.log(typeof box); //object
var box = /box/gi;
console.log(box); // /box/gi
注意: 其中g表示全局匹配, i表示忽略大小写
二.正则表达式的使用
1.使用正则表达式匹配字符串有两种方式;
test() 返回true则符合,false则不符合
exec() 返回数组则符合,null则不符合
这两种方式使用正则表达式对象去调用,参数为要匹配的字符串
var box = /box/gi;
var str = "This is a Box bOX box";
console.log(box.test(str));
console.log(/box/gi.test(str));
var box = /box/gi;
var str = "This is a Box boX"
console.log(box.exec(str));
console.log(/box/gi.exec(str));
2.字符串的正则表达式方法
除了test()和exec()方法,String对象也提供了4个使用正则表达式的方法。
match()查找放回数组或null
var str = "This is a Box box BoX";
var matchArr = str.match(/box/gi);
console.log(matchArr); //返回数组或null
replace()查找并替换
var replaceStr = str.replace(/box/gi, "xxx");
console.log(replaceStr);
search()查找并返回匹配的字符串的起始位置,找不到匹配的则返回-1
var searchIndex = str.search(/box/i);
console.log(searchIndex);
split()分割成数组
//根据指定字符串拆分, 返回拆分后的数组, 否则返回原字符串
var splitArr = str.split(/b/i);
console.log(splitArr.length);
3.修饰符
. 号字符,代表除了换行之外的所有的单个字符
var pattern = /g..gle/; //一个点.匹配一个任意的字符
var str = "goagle";
console.log(pattern.test(str));
*号字符,匹配其他字符使用,允许其他字符出现任意多次
// 重复多次匹配, 可以出现任意次,
var pattern = /g.*gle/; //.* 匹配0到多个字符
var str = "google"
console.log(pattern.test(str));
[]表示字符可用出现的范围
//[a-z]*表示任意0到多个a-z的字母
var pattern = /g[a-z]*gle/;
var str = "google";
console.log(pattern.test(str));
非字符 ^
var pattern = /g[^0-9]*gle/; //可以有任意多个非0-9的字符
var str = "google";
console.log(pattern.test(str));
+表示至少出现1次
//[A-Z]+: 至少出现一个A-Z的字符
var pattern = /[a-z][A-Z]+/;
var str = "gooGle";
console.log(pattern.test(str));
使用元符号匹配
//\w* :匹配任意多个数字字母下划线 , \w : 等价于[a-zA-Z0-9_]
var pattern = /g\w*gle/;
var str = "gooA3gle";
console.log(pattern.test(str));
\d 代表数字,等价于[0-9]
//\d* 表示任意多个数字
var pattern = /g\d*gle/;
var str = "g3243gle";
console.log(pattern.test(str));
\D 匹配非数字,相对于[^0-9]
var pattern = /g\Dgle/;
var str = "ga3gle";
console.log(pattern.test(str));
\D{7} 匹配至少7个非数字,相对于[^0-9]{7,}
var pattern = /\D{7,}/;
var str = "g3243gle";
console.log(pattern.test(str));
使用锚元字符
/^匹配开头,从头开始匹配
$/匹配结尾,从结尾开始匹配
var pattern = /^google$/;
var str = "google";
console.log(pattern.test(str));
\s匹配空格 \S 非空白字符
var pattern = /goo\sgle/;
var str = "goo gle";
console.log(pattern.test(str));
| 使用或模式匹配
// | 代表或者的意思, 匹配其中一种字符串
var pattern = /google|baidu|bing/; // | : 匹配三个中的其中一个字符串
var str = "googl2e bai3du;bingl"
console.log(pattern.test(str));
() 分组模式匹配
// ()加上小括号, 将内容进行分组, 可以作为一个整体进行多次匹配
var pattern = /(google){4,8}/; //匹配分组中的字符出现4-8次
var str = "googlegooglegooglegoogle"
console.log(pattern.test(str));
使用exec返回数组
exec()方法将匹配到的内容返回,并返回一个数组
//以字母开头,至少一个, 忽略大小写
var pattern = /^[a-z]+/i;
var str = "google 2016";
console.log(pattern.exec(str)); //"google"
g全局查找,i忽略大小写,m分组,?表示0到1个,\转义字符,?:后面的分组不匹配,RegExp.$1 获取第一个括号匹配的内容。