正则表达式
介绍
定义
正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式
特点
- 灵活性、逻辑性和功能性非常强
- 可以迅速地极简单的方式达到字符串的复杂控制
- 对于刚接触的人比较晦涩
- 实际开发一般都是直接复制写好的正则表达式,但是要求会使用正则表达式并根据实际情况修改正则表达式
使用场景
- 验证表单(匹配)
- 过滤掉页面内容中的一些敏感词(替换)
- 从字符串中获取我们想要的特定部分(提取)等
语法
定义规则
let 变量名 = /表达式/
其中 // 是正则表达式字面量,如
let reg = /abc/
匹配检测
变量名.test(被检测的字符串)
test() 方法用来查看正则表达式与指定字符串是否匹配,如
reg.test(str)
- 匹配返回
true - 不匹配返回
false
检索(查找)符合规则的字符串
reg.exec()
exec() 方法在一个指定字符串执行搜索匹配
- 匹配成功返回一个数组
- 匹配失败返回
null
元字符
普通字符
所有的字母和数字,仅能够描述它们本身,这些字符称作普通字符。即普通字符只能够匹配字符串中与它们相同的字符
元字符(特殊字符)
定义
一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能
参考文档:developer.mozilla.org/zh-CN/docs/…
正则测试工具: tool.oschina.net/regex
分类
边界符
-
作用:提示字符所处的位置
-
分类
边界符 说明 ^ 表示匹配行首的文本(以谁开始) $ 表示匹配行尾的文本(以谁结束) 注意:
如果
^和$在一起,表示必须是精确匹配
例题
console.log(/哈/.test('哈')) // true
console.log(/二哈/.test('二哈')) // true
console.log(/二哈/.test('很二哈哈')) // true
以^开头
console.log(/^二哈/.test('很二哈哈')) // false
console.log(/^二哈很傻/.test('哈')) // true
以$结尾
console.log(/^二哈$/.test('二哈很傻')) // false
console.log(/^二哈$/.test('二哈二哈')) // false
console.log(/^二哈$/.test('二哈')) // true
量词
-
作用:设定某个模式出现的次数
-
分类
量词 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n}重复 n次{n,}重复 n次或更多次{n,m}重复 n次到m次注意:
逗号左右两边不能出现空格
字符类
-
作用:用简单的字符表示繁琐的范围
-
分类
-
[ ]:匹配字符集合console.log(/[abc]/.test())后面的字符串只要包含
abc中任意一个字符,都返回true -
[-]:- 连字符,表示一个范围如:
[a-z]表示a到z26个英文字母都可以 -
[^]:里面加上 ^ 取反符号如
[^a-z]匹配除了小写字母以外的字符注意:
^ 要写到中括号里面。
-
预定义类
定义:某些常见模式的简写方式
分类
| 预定类 | 说明 |
|---|---|
\d | 匹配0~9之间的任一数字,相当于 [0-9] |
\D | 匹配0~9以外的字符,相当于 [^0-9] |
\w | 匹配任意的字母、数字和下划线,相当于 [a-zA-Z0-9_] |
\W | 除所有字母、数字和下划线以外的字符,相当于 [^a-zA-Z0-9_] |
\s | 匹配空格(包括换行符、制表符、空格符等),相当于 [\t\r\n\v\f] |
\S | 匹配非空格的字符,相当于 [^\t\r\n\v\f] |
| . | 代表一个任意字符 |
修饰符
-
作用:约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等
-
语法
/表达式/修饰符i是单词ignore的缩写,正则匹配时字母不区分大小写g是单词global的缩写,匹配所有满足正则表达式的结果
-
替换
replace字符串.replace(/正则表达式/,'替换的文本')- 第一个参数:被替换的字符串或者正则表达式
- 第二个参数:替换为的字符串
总结
正则表达式可能遇到的错误
-
Invalid regular expression: /^[0-9A-Zz-a_]$/: Range out of order in character class无效的正则表达式,在ASCII字符集中范围超出排序规则。说明在指定连续范围的时候,只能从小到大。即只能从
a-z,从0-9,不能反过来,否则报错。 -
Invalid regular expression: /^*$/: Nothing to repeat无效的正则表达式,没有可重复的东西。修饰符不能单独存在,必须修改前面的占位符。