正则表达式学习小结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式学习小结相关的知识,希望对你有一定的参考价值。
前段时间在看《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+术语。
预定义字符类
常用的预定义字符集
\\t | 水平制表符 |
\\b | 空格 |
\\v | 垂直制表符 |
\\f | 换页符 |
\\r | 回车 |
\\n | 换行符 |
\\cA : \\cZ | 控制符,例如:\\cM匹配一个control+M |
\\x0000:\\xFFFF | 十六进制Unicode |
\\x00:\\xFF | 十六进制ASCII |
. | 匹配除了新行(\\n)之外的任意字符 |
\\d | 匹配任意数字等价[0-9] |
\\D | 匹配任意非数字,等价于[^0-9] |
\\w | 匹配包括下划线的任意单词字符,等价于[A-Za-z0-9] |
\\W | 匹配任何非单词字符,包括空格,制表符,换页符等 |
\\s | 匹配任何空白字符,包括空格,制表符,换页符等 |
\\S | 匹配任何非空白字符 |
\\b | 匹配单词边界 |
\\B | 匹配非单词边界 |
分组
到目前为止,我们看到的操作符(比如+和*)只能影响前面的术语。如果将操作符应用多于一组术语,可以像数学表达式一样在该组上使用小括号。例如,/(ab)+/匹配一个或多个连续出现的子字符串"ab"。
或操作符(OR)
可以使用竖线(|)表示或者的关系。例如: /a|b/匹配"a"或"b"字符,/(ab)+|(cd)+/则匹配出现一次或多次的"ab"或"cd".
反向引用
这种术语表示法是在反斜杠后面加一个要引用的捕获数量,该数字从1开始,如\\1,\\2等。
举例来说,/<(\\w+)>(.+)<\\/\\1>/,/1匹配的字符是在匹配的时候第一组捕获所匹配的值。也就是(\\w+)匹配到的值。上述正则可以用来匹配html标签,例如"<strong>whatever</strong>"。这样的简单元素,不适用反向引用,是无法做到的,因为我们无法知道关闭标签的开始是否匹配。
上述内容基本介绍了正则表达式的基本使用方法。也是个人的一些总结,虽然和书上差不多,也算让自己重新回忆一遍。
正则学习链接 30分钟学会正则表达式
以上是关于正则表达式学习小结的主要内容,如果未能解决你的问题,请参考以下文章