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$$$/
等效
优秀的文章
← 动画