正则
-
两种声明方法
//
(推荐)new RegExp()
-
使用
new RegExp()
时注意:字符串会忽略掉第一个\
,如需要转义等操作需要加两个\
console.log('\d'); // d console.log('\\d'); // \d
-
空格也是一个字符
-
正则互不相等
-
元字符需要转义
-
默认情况下,匹配成功一次,就会终止匹配,
lasIndex
始终为0- 可以手动修改
lastIndex
的值,一个字符代表一个,来更改查询起始位置
- 可以手动修改
-
匹配一切字符(常用)
[\s\S]
[^]
- 用
s
修饰符配合.
修饰符
-
g:会更改 lastIndex 的值,只要后面有匹配项,匹配就会一直进行
- 与match配合返回所有结果
-
y:会更改 lastIndex 的值,匹配位置必须紧挨着,否则就停止匹配(必须连续匹配)
-
与g和match配合返回所有结果
'a1a2a3'.match(/a\d/y) // ["a1"] 'a1a2a3'.match(/a\d/gy) // ["a1", "a2", "a3"]
-
-
i:忽略大小写
-
m:多行处理
- 将一段字符串,按照换行符分为多行
^
和$
的匹配行为也会随之改变,识别多行
-
u:正确处理四个字节的UTF-16 编码,即两个 unicode 码就代表两个字符
-
s:
.
可以表示所有字符
属性
匹配规则
-
或
|
:- 将左右各视为整体,除非加括号
()
进行分割 (12|34)
:匹配12或者34
- 将左右各视为整体,除非加括号
-
.
:- 匹配除空格、换行外任何字符
- 加
s
修饰符后都可以匹配
-
边界:
^
起始$
结束^[a-z]{3,6}$
:限定了整个字符串必须是3-6位的字母
-
原子表
[]
:- 只匹配
[]
里面的 - 不需要加
\
转义 - 排除匹配:
[]
内第一个如果是^
,则整体为反向匹配 - 区间匹配:不能降序,如
[a-z]
、[0-9]
- 只匹配
-
字符类:
\d
:匹配数字,相当于[0-9]
。\w
:匹配字母、数字和下划线,相当于[A-Za-z0-9_]
。\s
:匹配空格,换行符等,相等于[\t\r\n\v\f]
。- 大写则规则相反
-
字符属性
\P
-
一般配合
p
和u
修饰符 -
\p{L}
:匹配字母 -
\p{L}
:匹配标点符号 -
\p{sc=Han}
:匹配中文
-
-
量词:
{n}
表示重复n
次{n,}
表示至少重复n
次{n,m}
表示重复n
到m
次?
某个模式出现0次或1次,等同于{0, 1}
。*
某个模式出现0次或多次,等同于{0,}
。+
某个模式出现1次或多次,等同于{1,}
。
-
贪婪模式:
+
和*
会触发贪婪模式
-
懒惰模式:
- 加上
?
则会变成最小匹配 - 使用
[]
配合贪婪,能实现更精确的匹配
- 加上
-
组
()
:- 作为分组结果,显示在匹配结果后
- 也可以起到合并(圆括号)的效果
- 可以通过
\n
来获取指定的分组 - match下,g和分组不能结合使用,会让分组失效
- 不记录组:
(?:)
分组内容不会显示,只起到圆括号的作用 - 别名:
(?<别名>)
-
断言:if判断
- 匹配y前的x,
x(?=y)
- 匹配不在y前的x,
x(?!y)
- 匹配在
y
后面的x
,(?<=y)x
- 匹配不在
y
后面的x
,(?<!y)x
- 匹配y前的x,
内置属性
- 使用简写时,使用
[]
全名 | 简写 | 代表的值 |
---|---|---|
input | $_ | 用于搜索的字符串 |
lastMatch | $& | 最后匹配的文本 |
lastParen | $+ | 最后匹配的捕获组 |
leftContext | $` | 第n个分组 |
rightContext | $' | $ 字符 |
$n | 1~9 个捕获组 |
let text = "this has been a short summer";
let pattern = /(.)(hort)/g;
pattern.test(text)
console.log(RegExp.input); // this has been a short summer
console.log(RegExp.leftContext); // this has been a
console.log(RegExp.rightContext); // summer
console.log(RegExp.lastMatch); // short
console.log(RegExp.lastParen); // s
console.log(RegExp['$1']); // s
console.log(RegExp['$2']); // hort
方法
-
RegExp.test()
:测试模式是否匹配 -
RegExp.exec()
- 搭配g修饰符,会记录每一次的 lastindex,可以实现循环输出,但不会一次性输出
let str="houdunren" let reg=/\w/g while(res=reg.exec(str)){ console.log(res); }
-
String.match
-
String.matchAll
:返回匹配结果迭代器(参数很全的那个)- 获取所有匹配项信息
- 必须搭配
g
修饰符
-
String.search
:返回匹配index