通过构造函数创建: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
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
在正则表达式中大部分字符都可以直接写
| 在正则表达式中表示或(整体的或)
/abc|bcd/
表示有abc或者bcd这两个字符串[] 表示或(字符集)
[^]
表示除了
[^x]
除了x.
表示除了换行外的任意字符
在正则表达式中使用\
作为转义字符
使用括号进行分组
其他的字符集
[A-Za-z0-9_]
[^A-Za-z0-9_]
[0-9]
[^0-9]
开头和结尾
^ 表示字符串的开头
$ 表示字符串的结尾例子
量词
+
一个以上,相当于{1,}*
任意数量的a?
0-1次,相当于{0,1}使用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)
}
re = /ab/
re.test("abc")
方法一:使用|
方法二:使用[]