最近做项目的时候涉及到一些数据校验的部分,感觉自己对于正则表达式可以说是遗忘得非常彻底了...所以做一个比较完整的笔记来补充一下正则知识吧!
正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
搜索模式可用于文本搜索和文本替换。
基础部分
一、基本语义描述符
1、\d
(数字字符)与\D
(非数字字符)
2、\w
(字母数字下划线)与\W
(非字母数字下划线)
3、\s
(空白字符)与\S
(非空白字符)
空白字符包括制表符、换行符、垂直制表符、换页符、回车符
4、.
(任何字符,除\n)
5、\xXX
(单字节)与\uXXXX
(双字节)
二、定位描述符
1、^
(匹配字符串的开始位置)
2、$
(匹配字符串的结束位置)
3、\b
(空格)与\B
(非空格)
三、重复描述符
1、*
(匹配0-∞次 等价于{0,})
2、+
(匹配1-∞次 等价于{1,})
3、?
(匹配0-1次 等价于{0,1})
4、{n}
(匹配n次,n>0)
5、{n,}
(匹配n-∞次,n>0)
6、{n,m}
(匹配前一项至少n次,但是不能超过m次 ,n>0 且 n<=m)
四、选择描述符
1、|
(或操作)
2、[]
(IN操作,匹配所包含的任意一个字符
`[^]`非的情况
IN条件与或条件的区别:或条件是支持多字符,将一个段做为一个整体而IN条件只支持单字符
五、组(...)与非捕获组(?:...)
正则表达式会将刮号里的内容单独保存成一个组,并且匹配到的组可以反向引用,\n是引用第n组
pattern.Add("\\.(.{1,6})");//.开头取6个字符
结果:Group[0]=.tansea Group[1]=tansea
如果不想把刮号里的内容保存到组,可以用非捕获组
pattern.Add("\\.(?:.{1,6})");
搜索模式:g,i,m
reg=new RegExp("pattern",["flags"])的方式比较好
pattern: 正则表达式
flags: g 全文查找出现的所有pattern
i 忽略大小写
m 多行查找
附:常用的正则表达式以及校验工具
https://c.runoob.com/front-en...
getCamelCaseStr(str: string, pascalCase = false) {
if (Array.isArray(str)) {
str = str
.map((x) => x.trim())
.filter((x) => x.length)
.join('-');
} else {
str = str.trim();
}
return str
.replace(/[_-]+/g, ' ') // replace '-_' with space
.replace(/[A-Z]{3,}[a-z]/g, ($1) => { // if there is 3 or more upper chars and next char is lower, format only the first one and the last one is upper
return $1.charAt(0) + $1.slice(1, $1.length - 1).toLowerCase() + $1.charAt($1.length);
})
.replace(/[A-Z]{3,}/g, ($1) => { // if there is 3 or more upper chars, format only the first one is upper
return $1.charAt(0) + $1.slice(1, $1.length).toLowerCase();
})
.replace(/\W+[a-zA-Z]/g, ($1) => {
return $1
.slice(0, $1.length - 1)
.concat($1.charAt($1.length - 1).toLowerCase());
})
.replace(/\s(.)/g, ($1) => {
return $1.toUpperCase(); // use camelcase for every split string
})
.replace(/\s/g, '') // combine
.replace(/^(.)/, ($1) => {
return pascalCase ? $1.toUpperCase() : $1.toLowerCase(); // option for first char is upper or not
});
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。