在线测试正则的网址:https://regexr-cn.com/
https://codejiaonang.com/#/course/regex_chapter1/0/0
https://c.runoob.com/front-end/854
https://denghao.me/special/regs/demo.html
() 小括号 分组
[] 中括号字符范围
{2,3} 位数大括号范围
-
字符类
1.1 字符集 [abc] // 等于(a|b|c)
1.2 非集 [^abc]
1.3 范围 [g-s]
1.4 点 . // 匹配除换行符之外的任何字符。 等价于 [^\n\r].
1.5 单词 \w
1.6 非单词 \W
1.7 数字 \d
1.8 非数字 \D
1.9 空白字符 \s
1.10 非空白字符 \S -
锚定(字符串范围)
2.1 开头 ^
2.2 结尾 $
2.3 词边界 \b (匹配一个单词边界,也就是指单词和空格间的位置)
2.4 非词边界 \B
匹配不是空格
4.b分组&引用
4.1 捕获分组 (ABC)
把多个标记分在同一组并创建一个捕获分组,用来创建子串或引用。
4.2 数字引用 \1
匹配捕获分组的结果。例如,\1 匹配第一个捕获分组的结果,\3 则匹配第三个结果。在vscode中用$1代替
4.3非捕获分组 (?:ABC)
这时就不能用 \1,用于跳过本次分组
5.前后查找
5.1正向先行断言 (?=abc)
匹配主表达式后面的组而不将其包含在结果中。
5.2负向先行断言 (?!abc)
- 量词
6.1 + {1,} // 1到无穷
6.2 * {0,} //匹配0个或更多前面的标记
6.3 {1,3} // 位数大括号范围
6.4 ? {0,1} // 可有可无,匹配前面的标记
6.5 | // 多选,或者。匹配前面的或者后面的表达式
7. 替换
7.1 匹配 $&
7.2 捕获分组 $1
7.3 匹配之前 $`
7.4 之后匹配
′
7.5
转
义
' 7.5 转义
′7.5转义 $$
7.6 转义字符 \n
8.标识 (/igmuy,放在最后面)
8.1 忽略大小写 i
8.2 全局搜索 /g
8.3 多行 /m
8.4 unicode /u
当启用Unicode标识时,你可以按\x{FFFFF}格式转义Unicode字符。
8.5 粘连 /y
应用场景
<[^<>]+>
获取html中的文字,剔除dom元素
例如座机判断:
(0\d{2,3}-)?[1-9]\d{6,7}(-\d{1,5})
(0\d{2,3}-) 区号判断
[1-9]\d{6,7} 中间7-8位数,不能以0开头
(-\d{1,5}) 分机号1-5位
010-82343433
//检查mail邮箱
funtin ismail(str){
var rg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;
return rg.test(str);
}
//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
funtin isRgistrUsrNam(s)
{
var patrn=/1{1}([a-zA-Z0-9]|[._]){4,19}KaTeX parse error: Expected 'EOF', got '}' at position 45: …ls return true }̲ //校验用户姓名:只能输入1…/; if (!patrn.x(s)) rturn fals return true } }}
//校验密码:只能输入6-20个字母、数字、下划线
funtin isPassw(s) { var patrn=/^(\w){6,20}KaTeX parse error: Expected 'EOF', got '}' at position 44: …ls return true }̲ //校验普通电话、传真号码:…/; var patrn=/2{0,1}(){1,3}[ ]?([-]?(()|[ ]){1,12})+KaTeX parse error: Expected 'EOF', got '}' at position 46: …s return true }̲ //校验手机号码:必须以数字…/; if (!patrn.x(s)) return fals return true }
//校验邮政编码
funtin isPstal(s)
{ //var patrn=/3{3,12}
/
;
v
a
r
p
a
t
r
n
=
/
[
a
−
z
A
−
Z
0
−
9
]
3
,
12
/; var patrn=/^[a-zA-Z0-9 ]{3,12}
/;varpatrn=/[a−zA−Z0−9]3,12/;
if (!patrn.x(s))
return fals return true }
//校验搜索关键字
funtin isSarh(s) {
var patrn=/[~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^
~!@
%^&()+=|\\\] [\]\{\}:;'\,.<>?]{0,19}
/; if (!patrn.x(s)) rturn fals rturn tru } funtin isIP(s) //by zrgling
{
var patrn=/4{1,20}$/;
if (!patrn.x(s))
return fals return true
}
在 VSCode 中,首先使用 option+command+F(macOS) 或者 Ctrl+H (Windows)打开「查找替换」栏。在第一行「查找」框中输入 \d+,在第二行「替换」框中输入 “$0”,最后点击「替换全部」按钮(在「替换」框右侧的第二个按钮),所有操作就都完成了。
.head(.)id
(.) 是正则
- 替换
原代码:v1/users/(.*).’/addresses’
现代码:v3/users/addresses/all?user_id=$1
其中$1即为匹配到的(.*)的部分
匹配十六进制颜色,例如(#dfd23d)
#[0-9A-F]{6} #[\dA-F]{6}
匹配ip
(\d{1,3})(.\d{1,3}){3}
匹配var 开头的字段
(?<=var\s).*
匹配引号中间的字段
“[^”]+" == “.*?”// 懒惰模式
取后面引号最短距离
(value = ")([/a-z]*)
(.?) // 查找括号内容,?是判断如果括号内为0位
e.?e // 两个e中间可以为空
e.+?e // 两个e中间至少有一位字符
e.+e // 最远距离的2个e
JS之 正则表达式的三大用途
1.测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
var pPattern = /^.(?=.{6,})(?=.\d)(?=.[A-Z])(?=.[a-z])(?=.*[!@#
%^&*? ]).*
/;
//输出 true
console.log(pPattern.test(“caibaojian#”));
2.替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
str.replace(reg, ‘要替换的’)
3.根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。
match()
- 语法
1、 arr[n] = str.match(reg); 或者 arr[n] = reg.exec(str);
返回的匹配数组arr[n]中,arr[0]表示整个匹配,arr[1],arr[2]…分别表示各个分组的匹配结果
2、str.replace(reg, ‘要替换的内容’),选择你不要的部分,替换掉
千分号
(function qianfen(str){
return str.replace(/(\d)(?=(\d{3})+$)/g,’$1,’)
})(‘1234567890’)
// 1,234,567,890
‘1234567890’.replace(/(\d)(?=(\d{3})+$)/g,’$1,’)