正则表达式笔记
前几天写了一个很简陋的模板引擎,关于正则表达式,我整理了一下,仅供以后再忘记的时候参考~
关于正则表达式(regular expression)
首先,它是一种工具,是一些用来匹配和处理文本的字符串,是正则表达式语言创建的。主要应用场景如下:
①查找特定的信息(搜索)
②查找并编辑特定的信息(替换)
正则表达式语言?
它并不是一种完备的程序设计语言,甚至算不上是一种能够直接安装并运行的程序。更准确的说,正则表达式语言是内置于其他语言或软件产品里的“迷你”语言。几乎所有语言都支持正则表达式语言,但,正则表达式与你正在使用的语言或者工具可以说毫无相似之处。
元字符
所谓元字符我觉得是有特殊意义的字符,如果要用到字符本身,需要前面添加\进行转义。
元字符大致分为两种:①用来匹配文本的(比如 . ) ②正则表达式语法所要求的 (比如 [ 和 ])
常见的元字符如下:
. 小圆点,用来表示任何一个单个的小于两个字节长度的字符
[ ] 定义一个字符集合。[ 和 ] 之间所有的字符都是该集合的组成部分,字符集合的匹配结果是能够与该集合里任何一个成员相匹配的文本。
- 字符区间。主要用于[ ] 之间,比如[012345679]等价于[0-9]。当然不仅限于于数字。关于“-”需要注意一下几点:①字符区间的首尾字符可以是ASCII字符表里的任意字符②避免尾字符小于首字符(例如[3-1]),会失效。③作为元字符只能用在 [ 和 ] 之间,在字符集合以外的地方,"-"只是一个普通字符,能与"-"匹配,无需转转义。
^元字符,对于一个字符集合进行取非匹配。注意:^的效果作用于给定字符集合的所有字符或字符区,而不是仅限于紧跟在^字符后面的那个字符或字符区间。
\ 对元字符进行转义。
匹配空白元字符
\r 回车符 \n 换行符 \t 制表符
匹配数字,非数字的类元字符
\d 任何一个数字字符,并不会匹配“10” <=> [0-9]
\D 任何一个非数字的字符
匹配字符数字,非字母数字的类元字符
\w 任何一个字符数字字符(大小写均可以)或者下划线 <=> [a-z0-9A-9Z_]
\W 任何一个非字母数字字符或下划线字符
匹配所有空白字符的类元字符
\s 任何一个空白字符 <=> [\f\n\r\t]
\S 任何一个非空白字符
重复匹配
匹配同一个字符(或字符集合)的多次匹配
+ 匹配一个或多个字符(至少一个)
* 匹配0个或者多个字符
? 匹配零个或者一个 \r? <=> [\r]?
{n} 匹配n次
{n ,m} 匹配n到m次
{n,} 至少匹配n次
注意:
* 和 + 都是所谓”贪婪型“的元字符,匹配到的行为模式越多越好。相反,懒惰型是匹配尽可能少的字符。
位置匹配
\b 单词边界
^ 字符串开头边界 ^是多用途的元字符,只有出现在[ 和 ]中并紧跟[,是发挥求非作用
$ 字符串结尾边界
(?m) 配合^和$ 使用,换行符被视为一个字符串分隔符
关于元字符结束了,接下简单说一下特别有用的子表达式
子表达式是一个大的表达式的一部分,把一个表达式划分为多个子表达式的目的是为了把那些子表达式当作一个独立的元素来使用。子表达式必须用 ( 和 ) 括起来。
回溯引用
\1 \2 ..... 注意 在JS中 用$代替\
$' 返回被匹配字符串前面的所有东西
$` 返回被匹配字符串后面的所有东西
$+ 返回最后一个被匹配的子表达式
$& 返回被匹配到的所有东西
前后查找
?= 向前查找 ?<=向后查找 注意:JS中不支持向后查找
JS中的正则表达式
①JS对正则表达式的支持来源于Perl语言
②命令选项有: g 全局;i 不区分大小写; m 多行字符串; s 单行字符串;
③POSIX字符类不被JS支持