1、正则表达式:操作字符串
正则表达式(regular expression)是一个描述字符模式的对象。
ECMAScript 的 RegExp 类 表示正则表达式,
而 String 和 正则表达式都定义了进行强大的【模式匹配】和【文本检索】与【替换】的函数。
2、创建正则表达式;
2.1 构造函数创建-参数1代表规则 参数2代表修饰符(忽略大小写 m:多行匹配 g:全局匹配)
若果存在输入ture,否则输出fales
var reg = new RegExp('abc','i');//创建一个对象
//text(str):字符串中匹配符合正则规则的字符串是否存在(包含),
console.log(reg.text('abchelloabc'))//true
console.log(reg.text('ah1bchelh2loabc'))//false
//2.2 构造函数创建--省略new
var reg = RegExp('hi','i');//创建一个对象
console.log(reg.text('hilloabc'))//true
//2.3 字面量创建--正则一定是字符串,不能加变量,更不能加引号
var reg = /hi/i;
console.log(reg.text('hiabc'))
匹配字符规则:
[]:匹配某一个范围中的一个字符。
[a-z];匹配所有的小写字母的一个字符
[A-Z];匹配所有的大写字母的一个字符
[a-zA-Z]:匹配所有字母中的一个字符
[a-zA-Z0-9]:匹配所有字母和数字中的一个字符
var reg = /[2-9][a-z]/i;
console.log(reg.test(‘2abc’))//匹配数字2-9之间的任意一个。包括2,9
1、[^a-z]:取反,不包括小写字母。
var reg = /[^a-z]/i; //非小写字母
console.log(reg.test('13'));
2.\d \D
\d:相当于[0-9]匹配数字0-9之间的任意一个.
\D:相当于[^0-9] 匹配非数字 .
var reg = /\d/;
var reg = /\D/;
console.log(reg.test('2'));
3.\w \W
\w:相当于[a-zA-Z0-9_] 匹配字母数字和下划线。
\W:相当于[^a-zA-Z0-9_] 匹配非字母数字和下划线。
var reg = /\w/;
var reg = /\W/;
console.log(reg.test('2'));
4.\s:匹配空白字符,空格字符。
5.行首行尾匹配
从最开始的位置一直匹配到最后的位置,等价匹配
^ 行首匹配 和 中括号里面的取反
$ 行尾匹配
var reg = /^hello$/;
console.log(reg.test('hello'));//等价匹配 true
6.重复的字符
?:匹配前面的字符0或1个
var reg = /^a?$/;//匹配0或1个a
console.log(reg.test(''));//ture
console.log(reg.test('a')); //true
console.log(reg.test('aa')); //false
*:匹配前面的字符0或任意多个
var reg = /^a*$/;//匹配0或任意多个a
console.log(reg.test(''));//ture
console.log(reg.test('a'));//ture
console.log(reg.test('aa'));//ture
console.log(reg.test('aaa'));//ture
+:匹配前面的字符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
var reg1 = /^(abc)+$/; //匹配一个或者多个abc
console.log(reg1.test('abc'));//true
console.log(reg1.test('abccc'));//false
console.log(reg1.test('abcabc'));//true
{}:数量范围。
a{5} 匹配5个a.
a{5,10} 匹配最少5个,最多10.
a{5,} 匹配最少5个.
var reg = /^(abc){3}$/; //匹配三个abc
console.log(reg.test('abcabcabc'));//ture
console.log(reg.test('abcabc'));//false
console.log(reg.test('abcabcabcabc'));//false
var reg = /^(abc){2,4}$/;//
console.log(reg.test('abcabcabc'));//true
console.log(reg.test('abcabcabcabc'))//ture
console.log(reg.test('abcabcabcabcabc'))//false
console.log(reg.test('abc'))//false
var reg = /^(abc){2,}$/; //匹配3个abc
console.log(reg.test('abcabcabc'));//true
console.log(reg.test('abcabc'));//true
console.log(reg.test('abcabcabcabc'));//true
console.log(reg.test('abc'));//false
console.log(reg.test('abcabcabcabcabc'));//true
7.替代字符-经常和()配合使用
var reg = /^(who|what|where)$/;
console.log(reg.test('what'));//true
console.log(reg.test('whata'));//false
console.log(reg.test('awhat'));//false
console.log(reg.test('where'));//true
console.log(reg.test('who'));//true
3、修饰字符
i:忽略大小写
var reg = /aBc/i;
var str = 'aabcdbfg';
console.log(reg.test(str));//ture
g:全局匹配
字符串的方法:使用 replace(正则表达式,替换的字符) 替换匹配到的数据
var reg = /[a-z]/g; //匹配任意一个小写字母
var str = '1aa2b3c4d5e';
console.log(str.replace(reg,'*'));//1**2*3*4*5*
var reg = /[a-z]+/g;
var str = '1aaa2bbccss3eeee4ffff';
console.log(str.replace(reg,"#"));//1#2#3#4#
var reg = /[a-z]+/ig;
var str = '1aAaAa2bbBccBbb3eeeEEee4fffFFfff5';
console.log(str.replace(reg, '*'));//1*2*3*4*5
m:多行匹配
var str = 'ab\ncd\nefg';
var reg = /^a/;
var reg1 = /^e/m; //多行匹配
var reg2 = /b$/m;
console.log(reg.test(str));//true
console.log(reg1.test(str));//true
console.log(reg2.test(str));//true
4、正则和字符串合作的几个方法
1.使用 replace 替换匹配到的数据,2个参数:参1代表正则,参2代表用来替换的字符
1.1字符串过滤(敏感词过滤)
var str = '这件衣服是你妈的还是你妹的我猜是你大爷的';
var reg = /妈|妹|大爷/g;
console.log(str.replace(reg,'*'));//这件衣服是你*的还是你*的我猜是你*的
1.2字符串首尾去空格–字符串的方法–trim()
将空格替换成空隙
var str = ' abc de fgh ';
console.log(str);// abc de fgh
console.log(str.trim());//abc de fgh
function copytrim (str){//自己封装的函数
return str.replace(/^\s+|\s+$/g, '');//将行首或者行尾的空格替换成空隙。
}
console.log(copytrim(str));
1.3统计字符长度(中文算2个字符,英文算1个字符)
var str = 'abc你好abc';
console.log(str.length);//8
//匹配中文的正则 : [\u4e00-\u9fa5]
console.log(str.replace(/[\u4e00-\u9fa5]/g, '**').length);
//采用任意的两个符号替换一个中文。
- 使用 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));//match可以取代exec方法。
- 使用 split 将字符串转换成数组。
var str = 'a1b2c3d4e5f';
console.log(str.split('3'));//["a1b2c", "d4e5f"]
console.log(str.split(/[0-9]/g));//["a", "b", "c", "d", "e", "f"]
- 使用 search 来查找匹配数据,和全局没有关系,查找第一个匹配值的位置。(-1)
var str = 'abcdabcd';
console.log(str.search('b'));//1
console.log(str.search(/b/g));//1