正则表达式学习小结

  前段时间在看《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分钟学会正则表达式

原文地址:https://www.cnblogs.com/xjcjcsy/p/5233462.html