正则表达式

195 阅读2分钟

正则表达式,一种增强版的通配符,可以帮我们匹配指定规则的字符串。

工具:正则表达式在线测试工具:[regex101.com/] (build, test, and debug regex )

1. 基础用法:

1.1 常用限定符

  • ? 代表前面的字符可以出现0次或者1次

示例: 匹配下面字符中的html标签 (即<div><p></p></div>)

<div><p> matching the tag </p></div>

则可用/<\/?\w+>/来匹配,其中 \/?即表示/这个符号可有可无(因为/为一个特殊字符串,所以使用\转义,\/代表匹配字符/)

\/? 等价于 \/{0,1}/这个符号可以出现0次或1次

  • *代表前面的字符可以匹配0到多次

示例:/go*gle/

可以匹配

google gooooogle gogle ggle

但是无法匹配

gigle

  • +表示前面的字符出现1次及以上

例如/go+gle/

'ggle'.match(/go+gle/)  //null
'gooooogle'.match(/go+gle/)  //gooooogle
'gogle'.match(/go+gle/)  //gogle
  • {} 表示限定字符出现的次数

例如:

 {m} //表示出现m次

 {m,} //表示出现m次及以上
 
 {m,n},//表示可以匹配最少m次,最多n次

示例:当我们匹配手机号码时,可以使用/^1[3-9]\d{9}\b/

其中,\d{9} 表示可以匹配9个数字字符

1.2 特殊字符

  • () 可以用来指定子表达式(分组)

例如: /(go)+/ 表示go作为整体出现1次及以上

const str = 'gogogoooo';

str.match(/(go)+/g);
// -> ['go', 'go', 'go']

str.match(/(go)+/g);
// -> ['gogogo']
  • | 表示或运算

  • [] 表示匹配[...]中的所有字符

    还可以在`[]`中指定字符的范围
    例如:`/[a-zA-Z0-9]+/`  (`+`*表示前面的字符出现1次及以上*)
     `[^ABC]` 表示匹配除了 `[...]` 中字符的所有字符
     例如`/[^0-9]+/` 表示匹配所有的非数字字符
  • ^ 表示匹配行首$表示匹配行尾

例如 /^1/ 表示匹配行首的"1"

image.png

/d$/ 表示匹配行尾的"d"

image.png

1.3 简写

简写字符组含义
\d[0-9]匹配一个数字
\D[^0-9]匹配一个非数字字符
\w[0-9a-zA-Z_]单词字符,数字、大小写字母、下划线,(word)
\W[^0-9a-zA-Z_]非单词字符
\s[ \t\v\n\r\f]空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符,(space)
\S[^ \t\v\n\r\f]非空白符
.[^\n\r\u2028\u2029]通配符,表示几乎所有字符,除了换行符、回车符、行分隔符和段分隔符(...)

表示所有字符,可用[\d\D][\w\W][\s\S][^]

2. 其他概念

2.1 贪婪、惰性匹配

*={} 匹配时,默认会尽可能多的字符,即为贪婪匹配;

在量词后面加?可实现惰性匹配,即尽可能少地匹配。

const str = '111111112';
str.match(/1{1,}/)  // ["11111111"]
str.match(/1{1,}?/)  // ["1"]
str.match(/1+?/)  // ["1"]