什么是正则表达式?
- 正则表达式通常被用来检索,替换那些符合某个模式(规则)的文本
- 对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,以及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
正则表达式的作用
- 给定的字符串是否符合正则表达式的过滤逻辑(匹配)
- 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
- 强大的字符串替换能力(替换)
正则表达式在线测试网站
创建正则的方法
- 在 JavaScript 中,正则表达式也是对象,是一种索引类型。
- 使用一个正则表达式字面量是最简单的方式。两个 / 是正则表达式的定界符。
- 你可以通过下面两种方法创建一个正则表达式:
- 使用一个正则表达式字面量,如下所示:
var reg = /abc/;
正则表达式字面量在脚本加载后编译。若你的正则表达式是常量,使用这种方式可以获得更好的性能。
- 调用 RegExp 对象的构造函数,如下所示:
var re = new RegExp("abc");
<script>
// 创建正则的第一种方法,正则的字面量 /
var reg = /abc/;
// 第二种,通过 构造函数 创建
var reg1 = new RegExp("cde");
console.log(reg1);
console.log(reg);
</script>
学习工作中建议使用字面量的方式去创建正则表达式,方便快捷
相关正则方法
-
字符串方法
字符串的方法
-
正则表达式方法
正则表达式方法
split方法
- 根据匹配字符串切割父字符串
比如:
根据空格切割字符串"aa bbb c dd eeeeeee"
'aa bbb c dd eeeeee'.split(/\s+/)
=> ["aa", "bbb", "c", "dd", "eeeeee"]
<script>
// split方法:分割字符串,成为一个数组
var str = "'aa bbb c dd eeeeee";
// 使用一个空格字符进行的精确分割
// var arr = str.split(" ");
// 使用正则表达式可以进行模糊匹配分割
var arr1 = str.split(/\s+/);
// console.log(arr);
console.log(arr1);
思考题:根据字母a切割字符串"bbaacaaaadddaeeeeeaaf"
var str2 = "bbaacaaaadddaeeeeeaaf";
var arr2 = str2.split(/a+/);
console.log(arr2);
search方法
- 寻找匹配字符串在父子符串中的位置
比如:
在"abcdefg"中寻找"cd"的位置
"abcdefg".search(/cd/)
= > 2
// search方法:寻找匹配子字符串在父子符串的位置
var str = "abcdefg";
console.log(str.search("cd"));
console.log(str.search(/ef/));
找不到对应的字符段就会返回-1,找到了就返回大于等于0的数字,对应所在位置
思考题:在字符串'aaaa o o bbb aaa'中寻找‘o o’位置
var str1 = "aaaa o o bbb aaa";
console.log(str1.search(/o o/));
答案为5,第5位。
match方法
- 在父子符串中寻找匹配字符串
比如:
在"abbcccbbbbbddbbbdabbb"中查询重复'b'字符串
'abbcccbbbbbddbbbdabbb'.match(/b+/g)
= >["bb","bbbbb","bbb","bbb"]
// match方法:在字符串中寻找匹配字符串
var str = "abbcccbbbbbddbbbdabbb";
// var arr = str.match(/b+/); //在匹配到第一个之后就结束
var arr = str.match(/b+/g); // 如果有全局修饰符g,会在找到所有匹配的字符串之后结束
console.log(arr);
思考题:'aaaa o o bbb o o aaa'找寻所有‘o o’字符串
var str1 = "aaaa o o bbb o o aaa";
var arr1 = str1.match(/o\s+o/g); //空格用\s表示,+号表示一个或者多个
console.log(arr1);
replace方法
- 替换父子符串中匹配的字符串
比如:
将"www.hello.com"替换成"www.byebye.com"
"www.hello.com".replace(/hello/,"byebye")
=> "www.byebye.com"
思考题:
过滤字符串中空格:'aa b c d e f ' => "aabcdef"
var str = "aa b c d e f ";
var str1 = str.replace(/\s/g,"");//将空格在全局下全部找到替换成不带空格的
console.log(str1);
正则方法exec
- 在字符串中寻找匹配字符串,该方法比其他正则方法或字符串方法支持的更复杂
比如:
在'aaaabccccbacabc'中查找'abc'字符串
var result = /abc/.exec('aaaabccccbacabc')
result => ["abc"]
result.index => 3
// exec 方法:查找匹配的字符串,输出到数组中
// 不论有没有全局修饰符,都只会在找到第一个之后停止
var str = "aaaabccccbacabc";
var reg = /abc/;
var arr = reg.exec(str);
console.log(arr);
console.log(arr.index);
思考题:在'ooooo 0 0 ooooooooooo'字符串中匹配["o 0 0 o"]
var str = "ooooo 0 0 ooooooooooo";
var reg = /o 0 0 o/;
var arr = reg.exec(str);
console.log(arr);
console.log(arr.index);

正则方法test
-
检测字符串是否匹配正则表达式
比如:判断'aaddccddabcddeeddfff'是否包含'abc'字符串
/abc/.test('aaddccddabcddeeddfff')
=> true
思考题:检测'a bc'和'abc'是否包含空格
正则表达式的组成
-
由一些普通字符和一些特殊字符(又叫元字符metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义
-
特殊字符:javascript 中常用特殊字符有 ( ) [ ] { } \ ^ $ | ? * + .
特殊字符的用途之一
-
若想匹配这类字符必须用转义符号 \ 如:(,^,\
测试换行符的小知识点
字符集
- 使用[]表示的可能的字符的集合,集合内部可以排列多个匹配字符串的可能性,整个字符集需要匹配的是字符串中的一个字符
-
[] --> 字符串中的一个字符,多选一的效果,有一个满足就算匹配成功
分类
简单类
// 简单类:多个可能匹配的字符连续书写在一起,只要其中一个匹配成功即可
var reg = /[abc]/;
console.log(reg.test("eeec"));
结果:true
范围类
// 范围类:将匹配同一类型且连续在一起的字符写到集合中,中间使用 - 连接
var reg = /[0-9]/;
// var reg = /[a-z]/;
// var reg = /[A-Q]/;
console.log(reg.test("A123456"));
结果:true
负向类
// 负向类:取反的意思,不包含字符集内部书写的字符
var reg = /[^A-Q]/;
console.log(reg.test("A"));
结果:false
组合类
// 组合类:单一类型或者简单类不能匹配所有结果,可以将多个写法连在一起书写
var reg = /[0-9a-z]/;
// var reg = /[0-9A-Z]/;
// 特殊的:如果数字、大写字母、小写字母,按照这种顺序写的完整的范围,可以缩写
var reg1 = /[0-z]/;
console.log(reg.test("a8"));
修饰符

边界

预定义类

量词

分组

或操作符
- 用竖线(|)字符表示或者的关系
/a|bcd/ 匹配a或者bcd字符
/(ab)+|(cd)+/ 匹配出现一次或者多次的ab或者cd
分组的反向引用
- 反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,通过“\编号(在表达式中)”,“$编号(在表达式外)”进行引用。从1开始计数
// 正则中通过分组匹配到的字符串,会被进行编号,从 1 开始
// 在正则内部可以通过 \1 方式,去对字符串进行反向引用
console.log(/^([a-z]{3})\1$/.test("byebye"));
console.log(/^([a-z]{3})\1$/.test("byelie"));
结果:true,false


匹配中文字符集
- 匹配中文:[\u4e00-\u9fa5]
// 匹配中文字符
var reg = /^[a-z\u4e00-\u9fa5]+$/;
console.log(reg.test("只有中文的文字内容"));
console.log(reg.test("只有中文的文 字内容"));
console.log(reg.test("只有中文的文a字内容"));
true
false
true
网友评论