正则表达式的匹配规则

本文详细介绍了正则表达式的各个关键概念,包括字面量字符、元字符、转义符、特殊字符、字符类、预定义模式、重复类、量词符、贪婪模式和修饰符,以及组匹配的各种用法,帮助读者全面掌握正则表达式的匹配规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字面量字符和元字符

大部分字符在正则表达式中,就是字面的含义,比如 /a/ 匹配 a, /b/ 匹配b。这种只表示它字面量含义的被称为字面量字符。

除了字面量,还有一些字符有特殊含义,不代表字面意思,被称为元字符
  
1,点字符(.)
      点字符匹配除回车(\r)、换行(\n)、行分隔符(\u2028)和分段符(\u2029)之外的所有字符 注:码点大于0xFFFF的Unicode字符不能被匹配,因为会被认为是两个字符。      
      
2,位置字符
      ^ 表示字符串的开始位置, $ 表示字符串的结束位置。
      
3,选择符(|)
      竖线符号在正则中表示 ‘或关系’ , 即匹配其中之一即可。
    …等等

转义符

正则中那些有特殊含义的元字符,如果要匹配它们本身,就要在前面加反斜杠。 比如要匹配 +, 就必须写成 +;
  在正则中,需要反斜杠转义的一共有12个字符: ^ . [ $ ( ) | * + ? { \ 注意:如果使用RegExp方法生成正则,转义需要加两个斜杠,因为字符串需要先转义一次。

特殊字符

\r 匹配回车符

\t 匹配制表符 tab

\n 匹配换行符

\v 匹配垂直制表符

\f 匹配换页符

\0 匹配null字符

字符类

字符类表示有一系列字符可供选择,只要匹配其中一个就可以。所有可供选择的字符放在中括号内,比如[abc] 表示 a b c之中任选一个。
  
1,脱字符(^)
    如果方括号内的第一个字符为 ^ , 则表示取反。 [^]表示匹配一切字符。
    
2,连字符(-)
    对于连续序列的字符,可以用-来进行简写。 a-z 0-9 A-Z -u4e00-\u9fa5

预定义模式

\d 匹配0-9的数字, 相当于[0-9]

\D 匹配非0-9的字符。 相当于[^0-9]

\w 匹配任意字母数字下划线。 相当于[0-9a-zA-Z_]

\W 相当于\w取反

\s 匹配空格(包括换行符、制表符、空格符), 相当于[ \t\r\n\v\f]

\S 相当于\s取反

\b 匹配单词边界

\B 匹配非单词边界,即在词的内部

重复类

模式的匹配次数,使用大括号{ }表示,{n}表示重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。

量词符

量词符用来设定某个模式出现的次数。
    ?问号表示某个模式出现0次或1次, 等同于{0, 1};
    
    * 星号表示出现0次或多次,等同于{0, } 
    
    + 加号表示出现1次或多次, 等同于{1, }

贪婪模式

量词符默认情况下都是最大可能匹配,即匹配到不能匹配为止,这种模式就叫贪婪模式
  /a+/ 表示匹配1个或多个a,那么到底会匹配几个a呢? 因为默认的是贪婪模式,所以会一直匹配到后面不是a为止。
  如果想将贪婪模式改为非贪婪模式,可以在量词后面加一个问号。这时候一旦满足条件,就不再往下匹配了。
  *?表示某个模式出现0次或者多次,采用非贪婪模式
  +?表示模式出现1次或者多次,采用非贪婪模式

修饰符

g 表示全局匹配

i 表示忽略大小写

m 表示多行模式。会修改^和的行为。加了m修饰符后,和的行为。 加了m修饰符后,^和m会识别换行符( \n )

组匹配

1,正则中的括号()表示分组匹配,括号中的模式表示分组中的内容。
    在正则表达式内部, 还可以使用 \n 来引用括号匹配的内容, n是从1开始,表示对应顺序的括号
    /(.)b(.)\1b\2/.test(‘abcabc’); \1匹配了第一个括号的a, \2匹配了第二个括号的c
    
2,非捕获组
    (?:x)称为非捕获组,表示不返回该组匹配的内容。
    
3,先行断言
    x(?=y)称为先行断言。x只有在y前面才匹配,y不计入匹配结果中。
    
4,先行否定断言
    x(?!y) 为先行否定断言。 x只有不在y前面才匹配。
  
  用通俗的语句来解释上面的这些:
  
    x(?! y): x只有不在y前面才匹配
    
    x(?=a): 表示在a的前面 才匹配。
    
    x(?<= a): 表示a的后面才匹配
    
    x(?<! a): 表示需要不匹配某个模式, 与 (?!a)相反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值