正则表达式
正则表达式
定义
正则表达式是一种描述字符串数据模式的方法,是检查、处理字符串的强力工具。
创建正则表达式
var re1 = new RegExp(“abc”);
var re2 = /abc/;
使用构造函数创建时,反斜杠的使用规则与往常相同。
使用双斜杠字面值创建时,不确定字符是否具有特殊含义,而不是字母、数字、空格式,只要在字符前加上反斜杠即可。
匹配测试
test方法
接受用户传递的字符串,并返回一个布尔值,表示字符串中是否包含能与表达式模式匹配的字符串。
var re2 = /abc/;
console.log(re2.test('abcde'));
// > true
console.log(re2.test('abxde'));
// > false
exec方法
如果无法匹配模式则返回null,否则返回一个表示匹配字符串信息的对象。
exec方法返回的对象中包含index属性,表示字符串成功匹配的起始位置。
var re2 = /abc/;
console.log(re2.exec('abcde'));
// > ["abc", index: 0, input: "abcde"]
console.log(re2.exec('abxde'));
// > null
若正则表达式中包含圆括号的子表达式分组,与这些分组匹配的文本也会出现在数组中。
第一个元素是与整个模式匹配的字符串,
其后是与第一个分组匹配的部分字符串,然后是第二个分组如此类推。
var dataTimeRE = /(\d{1,2})-(\d{1,2})-(\d{4})/;
var str = '24-8-2016';
var match = dataTimeRE.exec(str);
console.log(match);
// > ["24-8-2016", "24", "8", "2016", index: 0, input: "24-8-2016”]
字符组快捷写法
- \d --数字符号
- \w --字母和数字符号
- \s --空白符号(空格,制表符,换行符等)
- \D --非数字符号
- \W --非字母和数字符号
- \S --非空白符号
. --除了换行符以外的任意符号部分模式重复
- + --该元素至少重复一次
- * --该元素至少重复一次,同时可以匹配模式不存在的情况
- ? --可选,模式出现0次或1次
- { } --指明模式出现的次数。{4},4次。{2,4},2~4次。{,4},0~4次。{4.},至少4次以上。
边界
- ^ --字符始位置
- $ --字符结束位置
- \b --单词边界( \w 集合)
/^\d+$/:匹配一个或者多个数字组成的字符串。
/^!/ :匹配任何以感叹号开头的字符串。
/x^/ :不匹配任何字符串。
子表达式分组
如果一次性相想对多个元素使用*或者+,那么就需要使用分组。
var strRE = /boo+(hoo+)+/i;
var str = 'Booooohooooohoohoooo';
var test = strRE.test(str);
console.log(test);
// > true
选项模式
管道符号(|),表示从其左侧的模式和右侧的模式任意选择一个进行匹配。
var animalCount = /\b\d+ (pig|cow|chicken)s?\b/;
console.log(animalCount.test("15 cows"));
// > true
用例
检查手机号码
function isMobile(tel){
return /^((\(\d{2,3}\))|(\d{3}\-))?(1[34578]\d{9})$/.test(tel);
}
获取URL的Query参数
function getQuery(name) {
var result = location.search.match(new RegExp("[\?\&]" + name+ "=([^\&]+)","i"));
if(result == null || result.length < 1){
return "";
}
return result[1];
}
拆分host后缀
function domainarr(url){
var durl = /http:\/\/([^\/]+)\//i;
var hosts = url.match(durl);
var d_arr;
hosts = hosts[1];
d_arr = hosts.split('.');
return d_arr;
}