正则表达式(一)
(一)正则的基本使用方法
正则表达式是用于匹配字符串的一种模式、方法
正则表达式:regular expression,简称RegExp
正则表达式定义最常用的方法是字面量,写法//【定界符】
正则表达式在JS当中属于引用类型数据
console.log(/abc/);
console.log(typeof /你好/);
//正则表达式最常用书写方式
var reg = /\d+/g;
console.log(reg);
(二)字符串方法结合正则
字符串方法 | 作用 |
---|---|
split | 根据匹配字符串切割父串 |
match | 使用正则表达式与字符串相比较,返回一个包含匹配结果的数组 |
search | 使用正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的下角标 |
replace | 使用正则表达式和字符串比较,然后用新的子串来替换被匹配的字符串 |
(1)split方法结合正则
split方法:主要的作用是通过某一个匹配字符切割字符串,并返回一个数组
var str = '我要去 上海 北京 广州 深圳';
var arr = str.split(' ');
console.log(arr);
split方法结合正则
//字符串的split方法结合正则一切使用
var str = '我很喜欢中国 上海 北京 深圳 杭州';
/*
在正则表达式中:/s代表一个空格
+号:在正则当中代表量词,含义是连续出现次数大于等于1
*/
var arr = str.split(/\s+/);//空格连续出现的次数≥1
console.log(arr);
//用字符a切割字符串
//用字符a切割字符串
var str = 'bbaadfaaadffaddfaeraafgaaaaeeee';
var arr = str.split(/a+/);
console.log(arr);
(2)match方法结合正则
match方法:获取到第一个符合条件的字符,并返回一个数组
var str = '我喜欢听张杰的歌曲,因为张杰的歌很好听';
var arr = str.match('张杰');
console.log(arr);
match方法结合正则
//match结合正则一起使用
var str = '我喜欢听张杰的歌曲,因为张杰的歌很好听';
//在正则当中g【global】,主要的作用是将全部符合条件的字符匹配出来
//修饰符:只能放在右侧边界符的右侧
var arr = str.match(/张杰/g);
console.log(arr);
匹配字符b
//匹配字符b
var str = 'abbcccbbbbbbbbbbbbbbbbbbdddddddddd';
var arr = str.match(/b+/g);//不加g则匹配第一个
console.log(arr);
//匹配字符“oo oo”
//匹配字符“oo oo”
var str = 'aaaa o o bbb o o aaa';
var arr = str.match(/o\s+o/g);//不加g则匹配第一个
console.log(arr);
(3)search方法结合正则
search方法:获取到第一个符合条件的字符的索引值
var str = '水面清圆,一一风荷举';
console.log(str.search('风荷'));
search方法结合正则一起使用,只返回【第一个】符合条件的字符的索引值
console.log(str.search(/风荷/g));
返回字符b的索引值
//返回字符b的索引值
var str = 'abbdfgbbbbbbbssssbbbbbberg';
console.log(str.search(/b+/g));
(4)replace方法结合正则
replace方法:替换字符串中符合条件的【第一个】字符
var str = '我喜欢听张杰的歌曲,因为张杰的歌很好听';
var newstr = str.replace('歌曲','music');
console.log(newstr);
replace方法结合正则
//将“张杰”全部替换
var str = '我喜欢听张杰的歌曲,因为张杰的歌很好听';
var newstr = str.replace(/张杰/g,'邓紫棋');
console.log(newstr);
将’www.hello.com’替换成’www.byebye.com’
//将'www.hello.com'替换成'www.byebye.com'
var str = 'my name is tom';
var newStr = str.replace(/\s+/g,'');
console.log(newStr);
过滤字符串中空格:‘aa b c d e f’------>‘aabcdef’
//过滤字符串中空格:'aa b c d e f'------>'aabcdef'
var str = 'aa b c d e f';
var newStr = str.replace(/\s+/g,'');
console.log(newStr);
(三)正则表达式方法
(1)exec方法
exec:正则表达式方法,作用是在目标字符串中执行【一次】正则匹配操作
//在'aaaabccccbacabc'中查找'abc'字符串
var str = 'aaaabccccbacabc';
//声明一个变量存储正则表达式
var reg = /abc/;
console.log(reg.exec(str));//只获得一次目标字符
在’ooooo 0 0 oooooooooooooo’字符串中匹配’o 0 0 o’
//在'ooooo 0 0 oooooooooooooo'字符串中匹配'o 0 0 o'
var str = 'ooooo 0 0 oooooooooooooo';
var reg = /o\s+0\s+0\s+o/;
console.log(reg.exec(str));
(2)test方法
test:正则表达式方法,作用是检测正则表达式中数据,是否在目标字符串中出现,结果为布尔值
var str = '我喜欢听歌 张杰的歌';
var reg = /\s+/;
console.log(reg.test(str));//true
判断’abbbbbcsdabccccaabbccdd’字符串中是否包含’abc’字符串
//判断'abbbbbcsdabccccaabbccdd'字符串中是否包含'abc'字符串
var str = 'abbbbbcsdabccccaabbccdd';
var reg = /abc+/;
console.log(reg.test(str));//true
(四)正则表达式字符集
(1)简单类
简单类:就是任意多个字符进行集合书写,匹配某【一个】符合条件的字符 比如:[abc]
var str = '我喜欢abc,同时也喜欢bbc';
var arr =str.match(/[ab]bc/g);//[ab]代表匹配a或b
console.log(arr);
//简单类练习
var str = '我喜欢张杰的歌曲,也喜欢张宇的歌曲';
var arr = str.match(/张[杰宇]/g);
console.log(arr);
(2)范围类
范围类:有时匹配的东西很多,而且类型又相同,输入麻烦时,在中间加横线 比如:[0-9][A-Z][a-z]
var str = '12306网站购票,110报警';
var arr = str.match(/[0-9]+/g);//加号一定出现在匹配数据的后面
console.log(arr);
(3)组合类
- 组合类:允许用中括号匹配不同类型的单个字符,或者是一类及多类,或者一些单一的符号 比如[0-9a-z]
- 就是将对多个范围类放在一起进行匹配
var str = '水234面清ghj圆,一a12一风荷举'
var arr = str.match(/[a-z0-9]+/g);
console.log(arr);
(五)正则表达式修饰符
修饰符 | 作用 |
---|---|
g(global)修饰符 | 用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
i(ignore)修饰符 | 用于执行对大小写不敏感的匹配 |
- 修饰符务必出现在第二个边界符的右边
- 在正则表达式中修饰符可以同时书写多个
//g修饰符:全局匹配
var url = 'http://www.baidu.com';
var arr = url.match(/[a-z]+/g);
console.log(arr);
//i修饰符:忽略英文大小写
var url = 'HTTP//www.Sina.Com';
var arr = url.match(/[a-z]+/gi);
console.log(arr);
(六)正则表达式边界符
正则表达式中一共有以下两个边界符:
边界符 | 作用 |
---|---|
^开头边界符 | 表示字符串必须以^后面的内容作为开头,出现在第一个定界符前面 |
$结尾边界符 | 表示$前面匹配的结果必须位于字符串最后,出现在第二个定界符后面 |
- 在正则表达式中边界符不是必须的
- 边界符可以两个同时出现
//^开头边界符
var str = 'abc水面清圆,一一风荷举';
console.log(/^abc/.test(str));//true
//$字符串是以$前面的内容作为结尾
var str = '野渡无人舟自横123';
console.log(/123$/.test(str));//true
//两个边界符同时出现
var str = 'hello';
console.log(/^hello$/.test(str));//true