标签:
前段时间在看《JavaScript 忍者秘籍》一书中学习了一下正则表达式的用法。
正则表达式在一些常用的JavaScript库中,它们普遍用于处理各种任务。
术语与操作符
精确匹配
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$/。
重复出现
在重复的选项上,正则表达式提供了很多方式
这些重复操作符可以是贪婪的或非贪婪的。默认情况下,他们是贪婪的:他们匹配所有的字符组合。在操作符后面加一个问号(?),如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分钟学会正则表达式
标签:
原文地址:http://www.cnblogs.com/xjcjcsy/p/5233462.html