文章目录
- 正则表达式
- 1 正则表达式的介绍
- 2 创建正则表达式
- 3 通过整个表达式检查字符串是否符合规则
- 4 正则表达式的基本语法
- 5 提取符合规则的字符串
- 6 例子
正则表达式
1 正则表达式的介绍
- 正则表达式用来定义一个规则
- 通过这个规则计算机可以检查一个字符串是否符合规则或者将字符串中符合规则的内容提取出来
- 正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象
- typeof 返回的是object
2 创建正则表达式
通过构造函数创建:new RegExp()
可以接收两个参数(字符串) 1.正则表达式 2.匹配模式
使用这种方式js编译器会自动将我们的这种写法去转化和字面量相同的方式
优势:可以传递变量,动态生成自责表达式
let reg = new RegExp("a", "i") // 通过构造函数来创建一个正则表达式的对象
console.log(reg)
使用字面量来创建:
// 创建和上面相同的正则
let reg = /a/i
console.log(reg)
使用构造函数的形式需要考虑转义字符,在字面量中可以直接写
let reg = /\w/
reg = new RegExp("\\w") // 如果只写 \w 的话会转义成 w,就表示字母w
3 通过整个表达式检查字符串是否符合规则
let str = "a"
let reg = new RegExp("a")// 表示检查一个字符串中是否含有a
// let reg = /a/ // 也可以使用这种方式定义
let result = reg.test(str) // true
result = reg.test("b") // false
result = reg.test("abc") // true
result = reg.test("bcabc") // true
4 正则表达式的基本语法
-
在正则表达式中大部分字符都可以直接写
-
| 在正则表达式中表示或(整体的或)
/abc|bcd/
表示有abc或者bcd这两个字符串
-
[] 表示或(字符集)
- [a-z] 任意的小写字母
- [A-Z] 任意的大写字母
- [a-zA-Z] 任意的字母
- [0-9]任意数字
-
[^]
表示除了[^x]
除了x
-
.
表示除了换行外的任意字符 -
在正则表达式中使用
\
作为转义字符 -
使用括号进行分组
-
其他的字符集
- \w 任意的单词字符,相当于
[A-Za-z0-9_]
- \W 除了单词字符,相当于
[^A-Za-z0-9_]
- \d 任意数字,相当于
[0-9]
- \D 除了数字,相当于
[^0-9]
- \s 空格
- \S 除了空格
- \b 单词边界
- \B 除了单词边界
- \w 任意的单词字符,相当于
-
开头和结尾
-
^ 表示字符串的开头
-
$ 表示字符串的结尾例子
-
-
量词
- 只对前面紧接的一个字符起作用
- {m} 正好m个
- {m,} 至少m个
- {m,n} m-n个
+
一个以上,相当于{1,}*
任意数量的a?
0-1次,相当于{0,1}
5 提取符合规则的字符串
使用re.exec()
获取字符串中符合正则表达式的内容
案例:对于str = "abcaecafcacc"
提取出str中符合axc
格式的内容
默认情况下只会匹配第一个,通过设置模式
g
来开启全局匹配
let str = "abcaecafcacc"
let re = /a([a-z])c/g
let result = re.exec(str)
console.log(result)
不开启全局匹配g
模式,每次匹配的都是第一个
开启全局匹配g
模式:从头一直匹配到尾
在正则表达式中添加括号表示分组,因此我们现在可以拿到中间的字母(返回数组的第二个元素):
如果有多个括号的话,返回的顺序是按照左括号出现的顺序返回的
获取所有的匹配到的结果,使用循环可以实现
let str = "abcaecafcacc"
let re = /a([a-z])c/g
let result = re.exec(str)
while(result){
console.log(result[0], result[1])
result = re.exec(str)
}
6 例子
- 检查字符串中有没有字符串ab
re = /ab/
re.test("abc")
- 检查字符串中有没有a或b
方法一:使用|
方法二:使用[]
- 检查字符串中有没有小写字母
- 检查字符串中有没有除了小写字母之外的符号
- 检查字符串中是否以m开头或者结尾
- 检查字符串是不是abc
- 检查字符串中是否有连续出现三次ab