# 15.正则表达式
# 1.正则表达式概述
正则表达式(Regular Expression) 适用于匹配字符串字符组合的模式。
在JavaScript中,正则表达式也是对象
正则表通常用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单之恩那个输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤页面内容中的一些敏感内容(替换),或从字符串中获取到特定部分(提取)等
# 2.正则表达式的特点
- 灵活性、逻辑性和功能性非常的强
- 可以迅速地用极简单的方式达到字符串地复杂控制
- 对刚接触的人来说比较晦涩难懂
- 实际开发一般都是直接复制写好的正则表达式,但是要求会使用正则表达式且根据实际情况修改正则表达式
# 3.正则表达式在JavaScript中的使用
# 3.1创建正则表达式
1.通过调用RegExp对象的构造函数创建
let 变量名 = new RegExp(/表达式/)
let reg = new RegExp(/123/)
console.log(exp)
2.通过字面量创建
let 变量名 = /表达式/
let reg = /123/
# 3.2测试正则表达式 test
test() 正则对象方法,用于检测字符串是否符合该规则,该对象会返回true或false,其参数式测试字符串
regexObj.test(str)
console.log(reg.test('123')) // true
console.log(reg.test('abc')) // false
# 4.正则表达式中的特殊字符
# 4.1 正则表达式的组成
一个正则表达式可以由简单的字符构成,比如/abc/,也可以是简单和特殊字符的组合,比如 /ab*c/。 其中特殊字符也被称为元字符,在正则表达式中具有特殊意义的专用符号,如 ^ $ + 等
特殊字符非常多,可以参考:
🔗 MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions (opens new window)
# 4.2 边界符
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
边界符 | 说明 |
---|---|
^ | 表示匹配行首的文本(以谁开始) |
$ | 表示匹配行尾的文本(以谁结束) |
let reg = /abc/
console.log(reg.test('abc')) //true
console.log(reg.test('abcd')) //true
console.log(reg.test('eabc')) //true
// /abc/——只要包含abc,就为true
let reg2 = /^abc/ //添加边界符,只能以a开头
console.log(reg2.test('abc')) //true
console.log(reg2.test('abcd')) //true
console.log(reg2.test('eabc')) //false
let reg3 = /^abc$/ // 以a开头 c结尾
console.log(reg3.test('abc')) //true
console.log(reg3.test('abcd')) //false
如果两个边界符在一起,表示必须是精确匹配
# 4.3 字符类
字符类: [] 表示有一系列字符可供选择,只要匹配其中一个即可
let reg = /[abc]/ // 只要包含a或b或c 即为true
console.log(reg.test('apple')) // true
console.log(reg.test('buy')) // true
console.log(reg.test('touch')) // true
console.log(reg.test('sos')) // false
let reg2 = /^[abc]$/ // 三选一,只可以是a或b或c
console.log(reg2.test('a')) // true
console.log(reg2.test('aa')) // false
console.log(reg2.test('ab')) // false
[-] 方括号内部 范围符 -
let reg = /[a-z]/ //只要包含小写字母 即为true
console.log(reg.test('a123')) // true
console.log(reg.test('1')) // false
字符组合
let reg = /[a-zA-Z]/ // 大写小写字母均可
reg = /^[a-zA-Z0-9_-]$/
console.log(reg.test('1')) // true
console.log(reg.test('!')) // false
取反 [^]
let reg = /^[^a-zA-Z0-9_-]$/
console.log(reg.test('1')) // false
console.log(reg.test('!')) // true
# 4.4 量词符
量词符用来设定某个模式出现的次数
量词 | 说明 |
---|---|
* | 0或多次 |
+ | 1或多次 |
? | 0 || 1 次 |
{n} | n次 |
{n,} | 重复n次或多次 |
{n,m} | 重复n到m次 |
let reg = /^a*$/
console.log(reg.test('')) // true
console.log(reg.test('a'))
console.log(reg.test('aaaaaaaa'))
reg = /^a+$/
console.log(reg.test('')) // false
console.log(reg.test('a'))
console.log(reg.test('aaaaa'))
reg = /^a?$/
console.log(reg.test(''))
console.log(reg.test('a'))
console.log(reg.test('aaaa')) // false
reg = /^a{3}$/
console.log(reg.test('')) // false
console.log(reg.test('a')) // false
console.log(reg.test('aaa')) // true
console.log(reg.test('aaaaaaa')) // false
reg = /^a{3,}$/
console.log(reg.test('')) // false
console.log(reg.test('a')) // false
console.log(reg.test('aaa')) // true
console.log(reg.test('aaaaaaa')) // true
reg = /^a{3,5}$/
console.log(reg.test(''))
console.log(reg.test('a')) // false
console.log(reg.test('aaa'))
console.log(reg.test('aaaa'))
console.log(reg.test('aaaaa'))
console.log(reg.test('aaaaaaa')) // false
# 4.5 结合使用
let reg = /^[a-zA-Z0-9_-]{6,16}$/
# 4.6 括号总结
- 大括号——量词符,表示重复次数
- 中括号——字符集合。匹配方括号中的任意字符
- 小括号——表示优先级
# 4.7 预定义类
预定义类 | 说明 |
---|---|
\d | 匹配0-9之间的任意数字,相当于[0-9] |
\D | 匹配所有0-9以外的字符,相当于[^0-9] |
\w | 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_] |
\W | 匹配反\w |
\s | 匹配空格,相当于[\t\r\n\v\f] |
\S | 匹配非空格 |
let reg = /^\w{6,16}$/
# 5.正则表达式中的替换
# 5.1 replace替换
replace()方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式
stringObject.replace(regexp/substr, replacement)
let str = '1551shuangge'
let newstr = str.replace('1551','114514')
let regNewStr = str.replace(/1551/,'114514')
# 5.2正则表达式参数
/表达式/[switch]
switch(也称修饰符) 按照什么样的模式来匹配,有三种值
- g 全局匹配
- i 忽略大小写
- gi 全局匹配和忽略大小写
let newstr = str.replace('1551'g, '114514')
← 14.浅拷贝与深拷贝 1.ES6简介 →