imooc 正则
Regular Expression 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
图形化在线工具
- http://refiddle.com/
- https://regexper.com/ 或者 https://jex.im/regulex
有两种方法实例化 RegExp 对象
- 字面量
- 构造函数
修饰符
- g: global 全文搜索,匹配所有的
- i: ignore case 忽略大小写,默认大小写敏感
- m: multiple lines 多行搜索
字符类型
- 原意文本字符
- 元字符,有特殊含义的非字母字符,比如
* + ? $ ^ . | ( ) { } [ ]等- 字符类,使用
[abc]构建一个类;字符类取反,使用[^abc] - 范围类,使用
[a-z]所有小写字母,[a-zA-Z]所有英文字母 - 预定义类,
. \d \D \s \S \w \W - 边界,
\b \B ^ $ - 量词,
? + * {n} {n,m} {n,}- 贪婪模式,量词后加上
? - 分组,使用
(abc){3},abc 重复了 3 次 - 或,使用
|,优先级很低
- 贪婪模式,量词后加上
- 反向引用,捕获分组内的内容,使用
$1 $2 ...;忽略分组,使用(?:xxx) - 前瞻后顾
- 前瞻,
(?=assert) (?!assert),\w(?=\d)匹配一个字符,该字母后面必须是数字 - 后顾,
(?<=assert) (?<!assert)
- 前瞻,
- 字符类,使用
RegExp 对象属性,只读
gloable: 默认 false
ignoreCase: 默认 false
mutiline: 默认 false
lastIndex: 当前表达式匹配内容的最后一个字符的下一个位置,只有全局的正则才有效
source: 正则表达式的文本字符串
RegExp 对象方法
RegExp.prototype.test(str)RegExp.prototype.exec(str)没有匹配返回 null,否则返回一个结果数组[索引,组内信息]
String 对象方法
String.prototype.search(reg)返回第一个结果,忽略全局 g 标志String.prototype.match(reg)- 非全局没有 g,只执行一次匹配,没有匹配返回 null,否则返回一个结果数组,和上面的 exec 一样
[索引,组内信息] - 全局有 g,没有匹配返回 null,否则返回匹配的数组
- 非全局没有 g,只执行一次匹配,没有匹配返回 null,否则返回一个结果数组,和上面的 exec 一样
String.prototype.split(reg)String.prototype.replace(reg)- 高级用法,第二参数是回调函数,四个参数:匹配的字符串、分组内容(可能没有)、字符串索引、原字符串
补充:
有关 lastIndex 的坑
var r = /\w/g r.test('ab') // true r.lastIndex // 1 r.test('ab') // true r.lastIndex // 2 r.test('ab') // false r.lastIndex // 0
随记
字符匹配
- 模糊匹配
- 横向
{}- 大括号闭区间
- 一些简写
?+*等 - 贪婪匹配
?(区分简写?表示有或无)
- 纵向
[]- 连字符范围
- - 排除字符
^(区分位置锚字符) - 一些简写
\d\w\s.等
- 连字符范围
- 或
- 优先级很低
- 横向
- 模糊匹配
位置匹配
- 开头结尾
^$ - 单词边界
\b``\B - 正负向先行断言
(?=p)(?!p) - es6 向后行断言
(?<=p)(?<!p) - 一个位置内有很多位置
- 开头结尾
括号
- 分组
- 提取
- 替换
- 反向引用
\1- 嵌套括号以左括号为准
- 非捕获
(?:p)
回溯
不懂的点
- 惰性和贪婪
/^|$/g中间的管道符啥作用
引用
总结
一些概念
| 元字符 | 元字符 |
|---|---|
| 基本 | . \ | |
| 字符组 | [] [^] [-] |
| 数量 | {m,n} {m,} {m} + * ? |
| 位置 | ^ $ \b \B (?=p) (?!p) |
| 特殊 | \d \D \s \S \w \W |
| 标志 | g i m |
简写
| 简写 | 表示 | 记忆 |
|---|---|---|
\d (\D) | [0-9] | digit |
\w (\W) | [0-9a-zA-Z_] | word |
\s \S | [\t\v\n\r\f] | space |
. | [^\n\r\u2028\u2029] | all |
? | {0,1} | |
+ | {1, } | |
* | {0,} |
贪婪 和 惰性 (所有量词后面添加 ? 都能实现惰性,并且管道符也是惰性的)
举例:
贪婪:能力范围内,越多越好 \d{2,5}
惰性:满足最低配就进入下次 \d{2,5}?
位置的特性
/^hello$/写成/^^hello$$$/等效
优秀的文章
← 动画