美文网首页
regex 正则表达式 2022-10-09

regex 正则表达式 2022-10-09

作者: 9_SooHyun | 来源:发表于2022-10-08 22:45 被阅读0次

    一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列匹配某个句法规则的字符串。例如:Handel、Händel和Haendel这三个字符串,都可以由H(a|ä|ae)ndel这个模式来描述。大部分正则表达式的形式都有如下的结构:

    • 选择
      竖线|代表选择(即或集),具有最低优先级。例如gray|grey可以匹配grey或gray。

    • 数量限定
      某个字符后的数量限定符用来限定前面这个字符允许出现的个数。最常见的数量限定符包括+、?和*(不加数量限定则代表出现一次且仅出现一次):

      • 加号+代表前面的字符必须至少出现一次。(1次或多次)。例如,goo+gle可以匹配google、gooogle、goooogle等;
      • 问号?代表前面的字符最多只可以出现一次。(0次或1次)。例如,colou?r可以匹配color或者colour;
      • 星号代表前面的字符可以不出现,也可以出现一次或者多次。(0次、1次或多次)。例如,042可以匹配42、042、0042、00042等。很常见的.*就用来匹配任意长度的任意字符串,它实际上等价于任意个.
    • 匹配
      圆括号()可以用来定义操作符的范围和优先度。例如,gr(a|e)y等价于gray|grey,(grand)?father匹配father和grandfather。
      上述这些构造子都可以自由组合

    常见正则语法

    • \ 转义
    • ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,也匹配“\n”或“\r”之后的位置
    • $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置
    • ? 前面的字符最多只可以出现一次, or非贪心量化(Non-greedy quantifiers):当该字符紧跟在任何一个其他重复修饰符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”
    • (?:pattern) 非获取匹配(也就是,匹配结果不会获取group)
      匹配pattern但不获取匹配命中的子字符串(shy groups),也就是说这是一个非获取匹配,不存储匹配的子字符串用于向后引用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式,字符串"there is an industry, see!"去匹配pattern industr(?:y|ies),会得到一个match: "industry", 但不会得到group: "y"
    • pattern1(?=pattern2) 正向肯定预查(look ahead positive assert,也是一种非获取匹配)
      表示pattern1后边必须马上紧接pattern2,(?=pattern2)只作为筛选条件而不作为结果
      字符串"there is an industry, see!"去匹配pattern industr(?=y|ies),会得到一个match: "industr", 但不会得到group: "y"。更多非获取匹配,可以参考https://javascript.info/regexp-lookahead-lookbehind

    相关文章

      网友评论

          本文标题:regex 正则表达式 2022-10-09

          本文链接:https://www.haomeiwen.com/subject/rwmgartx.html