regular expression

文章目录

正则表达式

元字符及其作用

字符作用
\转移字符,将下一个字符标记为特殊字符,如:\n表示换行符
^匹配字符串的开始位置,如果设置了Multiple属性,它也匹配’\n’,’\r’之后的位置,如: /^b/匹配以b为开始的字符串(bus…)
$匹配字符串的结束位置,如果设置了Multip属性,它也匹配’\n’,’\r’之前的位置,如: /e$/匹配以e结束的字符串(apple…)
{n}匹配前面字符(表达式)n次,如:/o{2}/匹配foo中的oo,不匹配box中的o
{n,}至少匹配前面字符(表达式)n次(即 >= n),如:/o{4,}/匹配coooool中的o
{n,m}匹配前面字符(表达式)最少n次,最多m次(即 n <= x <= m),如:/o{2,3}/匹配coooool中前3个o(非贪婪模式下匹配前两个o)
  • | 匹配前面字符(表达式)零次或多次,相当于{0,},如:/co*l/ 将匹配cool或cl
  • | 匹配前面字符(表达式)一次或多次,相当于{1,},如:/co+l/ 将匹配cooool(中间o个数大于1即可)
    ? | 匹配前面字符(表达式)零次或一次,相当于{0,1},如:/jsx?/ 将匹配js或者jsx
    ? | ?字符还可以放在其他限制符(前面 *,+,?,{n},{n,},{n,m})后面,表示非贪婪匹配(即尽量少匹配字符,如:/co+/匹配coooool匹配到cooooo,而/co+?/匹配coooool匹配到co),默认为贪婪匹配
    (pattern) | 括号(),匹配里面的子表达式,并获取匹配结果(捕获),称为捕获组,后续可以使用\1,\2等表示括号内内容,如:/(bili)\1/ 可以匹配bilibili 。需要注意:\1与前面括号捕获到的内容是完全相同的,而不只是符合匹配模式(pattern)。
    (?:pattern) | 匹配括号内表达式pattern,但是不获取匹配结果,称为非捕获组,如:/cit(?:y|ies)/匹配city或者cities。
    (?=pattern) | 正向肯定预查,匹配任何其后符合pattern模式的字符串。这个一个非捕获组,(预查不消耗字符,即下一次匹配从预查前面匹配到的地方开始匹配,而不是pattern的位置开始匹配)。如:/dis(?=able)/匹配disable中的dis
    (?!pattern) | 正向否定预查,匹配任何其后不符合pattern模式的字符串。与(?=)类似,是一个非捕获组
    (?<=pattern) | 反向肯定预查,匹配任何前面字符符合pattern模式的字符串。
    (?<!pattern) | 反向否定预查,匹配任何前面字符吧符合pattern模式的字符串。
    . | 匹配出换行符之外任意字符,若要匹配所有字符,可以使用类似/(.|\n|\r)/的形式
    [xyz] | 字符集合,匹配x、y、z中任意一个字符。也可以使用缩写[0-9a-zA-Z]。如:/[0-9]+/将匹配一个或多个数字
    [^xyz] | 负值字符集合,匹配不是x、y、z的任意一个字符。也可以使用上述的缩写形式。
    x | y | 匹配x或者y,如/apple|pear/将匹配apple或者pear,而/appl(e|es)/将匹配apple或者apples
    \w | 匹配[0-9a-zA-Z_](包括下划线)
    \W | 匹配[^0-9a-zA-Z]
    \b | 匹配单词边界(即\w与\W之间的边界)
    \B | 匹配非单词边界
    \d | 匹配一个数字[0-9]
    \D | 匹配一个非数字[^0-9]
    \s | 匹配空白字符,包括空格,换行符,回车符,制表符
    \S | 匹配非空白字符
    \un | n为4个16进制表示的Unicode字符。

优先度

正则表达式从左到右进行计算

运算符描述
\转义
(),(?:),(?=),(?!),(?<=),(?<!),[]括号
*,+,?,{n},{n,},{n,m}限定符
|或操作

使用正则表达式的函数

正则方法

  • exec() 返回一个数组,没匹配到返回null。
  • test() 返回一个Boolean值

String方法

  • match() 加g与不加g返回不一样
    • 不加g的情况下,跟exec返回的相同,加了g的情况下返回匹配的数组
  • search() 返回匹配的第一个字符index
  • replace()
  • split()
分享到: