最近做项目的时候涉及到一些数据校验的部分,感觉自己对于正则表达式可以说是遗忘得非常彻底了...所以做一个比较完整的笔记来补充一下正则知识吧!


正则表达式(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
  });

}


吴静仪
26 声望2 粉丝

无我


« 上一篇
Webpack学习