JS正则总结
本文最后更新于:2022年4月8日 晚上
js正则
首先是用//
包裹
let reg = /^1[345789]\d{9}$/g
后缀
- i
ignoreCase : 忽略大小写
- g
global : 全局匹配,即匹配全部满足的(不是贪婪匹配)
- m
multiline : 多行匹配
正则的方法
reg.test(str)
:用来匹配字符串是否可以匹配这个正则(正则对象上的方法, 频率最高)str.match(reg)
: 有多少个匹配成功的字符串并显示(字符串上的方法)reg.search(str)
: 返回匹配到的第一个字符的位置reg.source
: 正则的内容reg.exec(str)
: 返回匹配到的第n个字符串reg.lastIndex
: 第n个匹配字符串的索引注意:4, 5的函数都是基于global匹配的,因为只有可以匹配多个才能有第几个匹配
str.split(reg)
: 很多时候我们都是用字符串来分隔字符的,但是我们也可以用正则str.replace(reg, char)
这个js原生的replace是只能匹配第一个字符,也就是replaceFirstIndex
如果我们使用全局的正则(g)来匹配,就能匹配替换所有了
开头和结尾固定匹配
开头:
^
结尾:
$
字符的范围
使用[]
eg:
let reg1 = /[0-3]/
// 这就是匹配出现0~3的字符串
let reg2 = /[ac]/
// 匹配有a或者c出现的字符串
如果^
在[]
里面,代表着‘非’
eg:
let reg = /[^a]/
// 匹配范围为不是a的所有字符
选择性匹配
使用|
eg:
let reg = /^(a|b|c)/
// 匹配开头是a或者b或者c
重复多少次
使用{}
eg:
let reg1 = /0{9}/
// 这就是匹配有9个0相邻的字符串
let reg2 = /0{3,5}/
// 就是匹配3个到5个0
let reg3 = /0{1,}/
// 匹配1到∞个0
默认的匹配是贪婪匹配,能多匹配就多匹配
重复次数扩展(很少用到)
+
{1,}
: 匹配当前字符一次到无数次*
{0,}
: 匹配当前字符0次到无数次?
{0,1}
: 匹配当前字符零次或一次
取消贪婪匹配
默认的重复次数匹配是贪婪的,能匹配多个就多个
可以使用?
来取消
eg:
let reg = /a{1,3}?/
// 能匹配一个就不匹配两个
常见元字符
只要看到大写,就是小写的取反
.
匹配所有单个字符,除了换行和结束符
\w
word : 匹配字母
\d
digit : 匹配数字
\s
space : 匹配空白(不单指空格)
\b
border : 匹配单词边界(前后有空格的字符)
\uxxxx
unicode : 匹配汉字
子表达式反向引用
使用\n
来代表第n个子表达的引用(即n为数字)
let reg = /(\d)\1\1/
// 可以匹配出连续三个相同的数字
使用replace反向引用子表达式
使用$n
来表示第n个子表达式的引用
let reg = /-(\w)/
let str = 'the-first-name'
str.replace(reg, ($, $1) => {
return $1.toUpperCase
})
常见问题
- 匹配任意长度字符串?
/[\d\D]*/
- 匹配AABB型?
/(.)\1/
- 字符串去重
let reg = /(\w)\1*/
str.replace(reg, '$1')
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!