正则表达式
一、简介
正则表达式(regular expression)是一个描述字符规则的对象。ECMAScript 的 RegExp 构造函数 表示正则表达式,而 String 和 正则表达式都定义了进行强大的【模式匹配】和【文本检索】与【替换】的函数。
二、创建正则表达式
1.构造函数创建
参1代表规则(字符串和变量)参2代表修饰符
修饰符i:忽略大小写;m:多行匹配 g:全局匹配
var reg = new RegExp('hello', 'i'); //创建一个正则对象
// test(str):字符串中匹配符合正则规则的字符串是否存在包含,存在true,不存在false
console.log(reg.test('hellodedd')); //true
console.log(reg.test('hellOfff')); //true
console.log(reg.test('hellbo')); //false
2.构造函数创建—省略new
var reg = RegExp('hi', 'i');
console.log(reg.test('hhhhhi')); //true
3.字面量创建—正则一定是字符串,不能加变量,更不能出现引号
var reg = /abc/i;
console.log(reg.test('abcdd')); //true
三、匹配字符规则
1.[]:匹配某个范围中的一个字符
[a-z]:匹配所有的小写字母中的一个
[A-Z]:匹配所有的大写字母中的一个
[a-zA-A]:匹配所有的字母中的一个
[a-zA-Z0-9]:匹配所有的字母和数字中的一个
[^a-z]取反不包括小写字母
var reg = /[2-9]/ //匹配数字2-9之间的任意一个
console.log(reg.test('35w')); //true
var reg = /[^a-z]/; //非小写字母
console.log(reg.test('f')); //false
- \d 0-9数字 \D 非数字
- \w:[a-zA-Z0-9_] 匹配字母数字和下划线 \W 相当于[^a-zA-Z0-9_] 匹配非字母数字和下划线
- \s 匹配空白字符,空格字符
5.行首行尾匹配 等价匹配 ^行首匹配 $行尾匹配
6.重复的字符
?:匹配字符0或1个
var reg = /^a?$/; //0个或1个a
console.log(reg.test('')); //true
console.log(reg.test('a')); //true
console.log(reg.test('aaa')); //false
*:匹配字符0个或多个
var reg = /^a*$/; //0个或多个a
console.log(reg.test('')); //true
console.log(reg.test('a')); //true
console.log(reg.test('aaa')); //true
console.log(reg.test('aaax')); //false
+:匹配前面的字符1或任意多个
var reg = /^a+$/;//匹配1或任意多个a
console.log(reg.test('')); //false
console.log(reg.test('a')); //true
console.log(reg.test('aaaa')); //true
console.log(reg.test('aaaac')); //false
()分组:
var reg = /^abc+$/; //匹配ab和一个或者多个c
console.log(reg.test('abc')); //true
console.log(reg.test('abccc')); //true
console.log(reg.test('abcabc')) //false
{}:数量范围
a{5} 匹配5个a
a{5, 10}最少5个最多10个
a{5,}最少5个
var reg = /^(abc){3}$/; //匹配3个abc
console.log(reg.test('abcabcabc')); //true
console.log(reg.test('abcabc')); //false
console.log(reg.test('abcabcabcabc')); //false
var reg = /^(abc){2,4}$/; //匹配2到4个abc
console.log(reg.test('abcabcabc')); //true
console.log(reg.test('abcabc')); //true
console.log(reg.test('abc')); //false
var reg = /^(abc){2,}$/; //匹配两个以上abc
console.log(reg.test('abcabcabc')); //true
console.log(reg.test('abcabc')); //true
console.log(reg.test('abcabcabcabcabcabc')); //true
console.log(reg.test('abc')); //false
7.替代字符—经常和()配合使用
var reg = /^(who|what|where)$/;
console.log(reg.test('what')); //true
console.log(reg.test('who')); //true
console.log(reg.test('awhat')); //false
四、修饰符
1.i:忽略大小写
var reg = /aBc/i;
var str = 'abchcbaabc';
console.log(reg.test(str)); //true
2.g:全局匹配
字符串的方法:使用replace(正则表达式,替换的字符)替换匹配到的数据
var reg = /[a-z]/g; //匹配任意一个小写字母
var str = '1a2b3c4d5e6';
console.log(str.replace(reg, '*')); //将字母换成* 1*2*3*4*5*6
var reg = /[a-z]+/g; //匹配一个或多个字母
var str = '1aaa2bbccbb3eeeee4ffffff5';
console.log(str.replace(reg, '*'));
var reg = /[a-z]+/ig;
var str ='1aAaAa2bbBccBbb3eeeEEee4fffFFfff5';
console.log(str.replace(reg, '&')); //1&2&3&4&5
3.m:多行匹配----次要
console.log('ab\ncd\nefg');
var str = 'ab\ncd\nefg';
var reg = /^a/;
var reg1 = /^c/m;
var reg2 = /b$/m;
console.log(reg.test(str)); //true
console.log(reg1.test(str)); //true
console.log(reg2.test(str)); //true
五、正则和字符串合作的方法
1.使用 replace 替换匹配到的数据,2个参数:参1代表正则,参2代表用来替换的字符
1.1字符串过滤(敏感词过滤)
var str = '这件衣服是你妈的还是你妹的我猜是你大爷的';
var reg = /妈|妹|大爷/g;
console.log(str.replace(reg, '*')); //这件衣服是你*的还是你*的我猜是你*的
1.2字符串首尾去空格-----字符串方法---trim();
将空格替换成空隙
var str = ' abc ddcdv dcdc ';
console.log(str);
console.log(str.trim()); //系统提供的字符串方法
function copyTrim(str){
return str.replace(/^\s+|\s+$/g, ''); //将行首或者行尾的空格替换成空隙。
}
console.log(copyTrim(str));
2. 使用match(正则)方法获取匹配内容,返回数组
exec():正则下面的方法,作用和上面相似,和全局没有关系。
var str = '124daff1223jfk32478fadshf324789hsjfhjkds23847';
console.log(str.match(/\d/g)); //["1", "2", "4", "1", "2", "2", "3", "3", "2", "4", "7", "8", "3", "2", "4", "7", "8", "9", "2", "3", "8", "4", "7"]
console.log(str.match(/\d+/g)); //["124", "1223", "32478", "324789", "23847"]
console.log(str.match(/\d+/));
console.log(/\d+/.exec(str)); //和38行代码一样
var str = 'hello你好hi大家好hehe';
console.log(str.match(/[\u4e00-\u9fa5]+/g)); //["你好", "大家好"]
3.使用split将字符串转换成数组
var str = 'a1b2c3d4e5f';
console.log(str.split('3')); //["a1b2c", "d4e5f"]
console.log(str.split(/[0-9]/g)) //["a", "b", "c", "d", "e", "f"]
4.使用search来查找匹配数据,和全局没有关系,查找第一个匹配值的位置
var str = 'abcdabcd';
console.log(str.search('b')); //1
console.log(str.search(/b/g)); //1
五、正则案例实现
主要是表单验证功能