• 正则表达式学习小结


      前段时间在看《JavaScript 忍者秘籍》一书中学习了一下正则表达式的用法。

      正则表达式在一些常用的JavaScript库中,它们普遍用于处理各种任务。

    • 操作HTML节点中的字符串
    • 使用CSS选择器表达式定位部分选择器
    • 判断一个元素是否含有特定的样式名称(class)
    • 更多..

    术语与操作符

      精确匹配

      

    1 var pattern = /test/

      如果一个字符不是特殊字符或操作符,则表示该字符必须在表达式中出现。例如上方表达式,这些字符必须在一个字符串中出现才能成功匹配。

      /test/的意思是说,一个接着一个的字符,"t"后面跟着"e","e"后面跟着"s","s"后面跟着"t"。

      匹配一类字符

      很多时候我们不想匹配一个特定的字符,而是想匹配一个有限字符集中的某一个字符。我们可以通过将字符集放到中括号内,来指定该字符集操作符:[asd]。

      上述示例,是说我们要匹配"a","s","d"中的任何一个字符。注意,及时这个表达式横跨五个字符,但它只能匹配候选字符串中的一个字符。

      有的时候我们想要匹配一组有限字符集以外的字符。可以通过中括号第一个开括号的后面加一个插入符(^)来实现:[^asd],其意义是: 除了"a","s","d"以外的其他任意字符。

      字符集还有一个范围操作。比如[a-m], 中横线表示"a"到"m"之间的所有字符都在字符集内。

      转义

      正则表达式中有一些特殊字符,比如上文提到的[,],-,^ 以及一些其他将在后文提到的特殊字符,如果我们想要匹配这样的特殊字符应该怎么做?在正则里,使用反斜杠可以对任意字符串进行转义,让被转义的字符作为字符本身进行匹配。所以 [  表示要匹配 [字符。两个反斜杠(//)则匹配一个反斜杠.

      匹配开始与匹配结束

      我们可能经常需要确保模式匹配一个字符串的开始,或者一个字符串的结束(例如后文中提到的去空格技巧) 。插入符号 (^)作为正则的第一个字符,则表示从开头进行匹配,/^test/只能匹配 test开头的字符串了。注意这里的(^)是一个重载,上文中它还用来否定一个字符集。同理,美元符($)表示该匹配必须出现在字符串的结尾: /test$/。

      同时使用^和$表示指定的模式必须包含整个候选字符串: /^test$/。

      重复出现

      在重复的选项上,正则表达式提供了很多方式

    • 在一个字符后面加一个问号(?),可以定义为该字符是可选的,也就是可以出现一次或者根本不出现。例如,/t?est/ 可以匹配"test"和"est".
    • 如果一个字符要出现零次或多次,可以使用加号(+)。例如,/t+est/表示可以匹配"test","tttest","ttest",而不能匹配"est"。
    • 如果一个字符要出现多次或零次,可以使用星号(*)。例如,/t*est/表示可以匹配"test","ttest","tttest"以及"est"。
    • 也可以在字符后面的花括号里指定一个数字来表示重复次数,例如/a{4}/表示匹配含有连续四个"a"的字符串。
    • 也可以在字符后面的花括号里指定两个数字(用逗号隔开)来表示重复次数区间。例如,/a{4,10}/表示匹配任何含有连续4个至10个"a" 字符的字符串。
    • 次数区间的第二个值是可选的(但是要保留逗号),其表示一个开区间。例如,/a{4,}/表示匹配任何含有连续4个或多于4个"a"字符的字符串。

      这些重复操作符可以是贪婪的或非贪婪的。默认情况下,他们是贪婪的:他们匹配所有的字符组合。在操作符后面加一个问号(?),如a+?,可以让表达式成为非贪婪的:进行最小限度的匹配.

      举个例子,如果我们对"aaa"进行匹配,正则表达式/a+/将匹配所有这三个字符,而非贪婪表达式/a+?/则只匹配一个a字符,因为一个a就可以满足a+术语。

      预定义字符类

      常用的预定义字符集

    预定义的字符类和字符术语
    水平制表符
     空格  
    v 垂直制表符
    f 换页符
    回车
    换行符
    cA : cZ 控制符,例如:cM匹配一个control+M
    x0000:xFFFF 十六进制Unicode  
    x00:xFF 十六进制ASCII
    . 匹配除了新行( )之外的任意字符
    d 匹配任意数字等价[0-9]
    D 匹配任意非数字,等价于[^0-9]
    w 匹配包括下划线的任意单词字符,等价于[A-Za-z0-9]
    W 匹配任何非单词字符,包括空格,制表符,换页符等
    s 匹配任何空白字符,包括空格,制表符,换页符等
    S 匹配任何非空白字符
     匹配单词边界
    B 匹配非单词边界

      

      

      分组

      到目前为止,我们看到的操作符(比如+和*)只能影响前面的术语。如果将操作符应用多于一组术语,可以像数学表达式一样在该组上使用小括号。例如,/(ab)+/匹配一个或多个连续出现的子字符串"ab"。

      或操作符(OR)

      可以使用竖线(|)表示或者的关系。例如: /a|b/匹配"a"或"b"字符,/(ab)+|(cd)+/则匹配出现一次或多次的"ab"或"cd".

      反向引用

      这种术语表示法是在反斜杠后面加一个要引用的捕获数量,该数字从1开始,如1,2等。

      举例来说,/<(w+)>(.+)</1>/,/1匹配的字符是在匹配的时候第一组捕获所匹配的值。也就是(w+)匹配到的值。上述正则可以用来匹配html标签,例如"<strong>whatever</strong>"。这样的简单元素,不适用反向引用,是无法做到的,因为我们无法知道关闭标签的开始是否匹配。

      上述内容基本介绍了正则表达式的基本使用方法。也是个人的一些总结,虽然和书上差不多,也算让自己重新回忆一遍。

      正则学习链接 30分钟学会正则表达式

  • 相关阅读:
    消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!
    消息中间件——RabbitMQ(五)快速入门生产者与消费者,SpringBoot整合RabbitMQ!
    消息中间件——RabbitMQ(四)命令行与管控台的基本操作!
    消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!
    LayUI的基本使用
    Git报错:Your branch is up to date with 'origin/master'.
    Git报错:Please tell me who you are.
    Git报错:Permission denied (publickey)
    在 windows 上安装 git 2.22
    在 windows 上安装 git 2.15
  • 原文地址:https://www.cnblogs.com/xjcjcsy/p/5233462.html
Copyright © 2020-2023  润新知