1.正则表达式的作用
1.1正则表达式是专门用来处理字符串的。
- 正则表达式可以从字符串中查找需要的数据;
正则表达式可以从字符串中获取需要的数据;
正则表达式可以从字符串中替换需要的数据。
1.2正则表达式是由特殊的字符组成的。
- [] 中括号中可以写多个任意字符,代表只匹配一个字符
[abc] 代表可以匹配a,b,C三个字母中的任意一个字符
[a-z] 匹配小写字母中的任意一个
[A-Z] 匹配大写字母中的任意一个
[A-Za-z] 匹配所有的字母
[0-9] 匹配任意一个数字 - [^] 如果中括号中,以^ 开头,代表非
[^0-9] 匹配非数字中的任意一个字符
[^a-z] 匹配非小写字母中的任意一个字符
2.定义一个正则表达式
- /… / 以
/
开头,以/
结尾,中间的内容为正则表达式
let regex = /[abc]/
new RegExP
对象
let regex =new RegExP("[abc]")
上述的代码可以将一个字符串转成正则表达式。
let regex = new RegExp(/[abc]/)
例:
let regex = /[abc]/ ;
console. log(regex)
let regex1 = new RegExp("[abc]") ;
console. log(regex1)
控制台显示:
3.正则表达式中的两个方法
- test() 返回一个boolean 值,代表是否匹配
例:
let regex = /[abc]/ ;
var s = "sdbfascd";
console. log(regex.test(s))
控制台显示:
注:字符串中只要有abc中任意一个都匹配,返回true。
- exec() 返回一个数组、数组中存放的是正则匹配的元素,如果不匹配,返回null
注:exec() 返回一个数组,数组中索引为0的元素是整个正则表达式匹配的内容;
索引大于0的数据,代表的是正则表达式中子表达式(分组) 匹配的内容。
例:
let regex = /[abc]/ ;
var s = "sdbfascd";
console. log(regex.exec(s))
控制台显示:
4.正则表达式中的特殊字符
4.1
\d | 匹配任意一个 数字,等价于[0-9] |
---|---|
\D | 等价于[^0-9] |
\w | 匹配字母、数字、和下划线中的任意一个字符串 [a-zA-Z0-9_] |
\W | 等价于[^a-zA-Z0-9_] |
例:
let regex = /\w/ ;
var s = ",_sdbfascd";
console. log(regex.exec(s))
控制台显示:
注:- 中划线不匹配
4.2
\s | 匹配一个空白字符 (空格和Tab制表符产生的空白) |
---|---|
\S | 匹配一个 非空白字符 |
例:
let regex = /\s/ ;
var s = " ";
console. log(regex.exec(s))
控制台显示:
4.3
. | 匹配除换行符之外的所有 任意一个字符 |
---|---|
. | 匹配一个点 |
例:
let regex = /./ ;
var s = `
sdf
dfdsf
`;
console. log(regex.exec(s))
控制台显示:
注:sdf前有空格
-
X{n} 匹配 n个X X{n,} 匹配至少 n个X X{n,m} 匹配 n到m个X
例:
let regex = /[a-z-]{3,6}/ ;
var s = `sdfsAd-sdfsdf_sdf`;
console. log(regex.exec(s))
控制台显示:
5.贪婪表达式
X* 匹配 0到多个,等价于X{0}
X+ 至少匹配一个,等价于X{1,}
X? 匹配最多一个,等价于X{0,1}
非贪婪式表达式,在贪婪式表达式后 添加一个?
X*? 匹配 0到多个
X+? 至少匹配一个
X?? 匹配最多一个
例:
let regex = /[a-z-]*F/ ;
var s = `sdAfsAd-sdfsFdf_sdf`;
console. log(regex.exec(s))
控制台显示:
let regex = /[a-z-]*f/ ;
var s = `sdAfsAd-sdfsFdf_sdf`;
console. log(regex.exec(s))
控制台显示:
let regex = /[a-z-]+f/ ;
var s = `sdAfsAd-sdfsFdf_sdf`;
console. log(regex.exec(s))
控制台显示:
let regex = /[a-z-]?f/ ;
var s = `sdAfsAd-sdfsFdf_sdf`;
console. log(regex.exec(s))
控制台显示:
6.限定符
^ 如果出现在正则的第一个位置,则代表以……开头
$ 如果出现在正则的尾部,代表以... 结尾
7.选择
| 或
8.分组
(...) 组从左到右进行查询
9.引用
\num 引用第 num 组的匹配的内容,num从 1 开始
10.命名捕获组
(?<key>\d+) 将\d+ 匹配的内容 赋值给key,可以通过exec(). groups来进行获取
?: 非捕获匹配
famil(?:y|ies)此时的小括号不能算作分组
11.断言
正向确定断言 ?=
正向否定断言 ?!
反向确定断言 ?<=
反向否定断言 ?<!