正则表达式总结

在JavaScript中用正则表达式是最常见不过了,正则看起来像天书,理解了之后其实不难,下面我将总结一下各种正则字符的意思。客官请慢用:

元字符

符号 含义
\b 元字符,代表单词的开头或结尾,也就是单词的分界处,不匹配任意一个字符,只匹配一个位置
. 元字符,匹配除了换行符以外的任意字符
* 可以连续重复使用任意次
\w 匹配字母或数字或下划线
\s 匹配空格符
\d 匹配数字
^ 匹配字符串开始
$ 匹配字符串结束

重复

符号 含义
* 重复0次或多次
+ 重复1次或多次
? 重复0次或1次
{n} 重复N次
{n, } 重复N次或更多次
{n, m} 重复n到m次

字符类

符号 含义
[] 匹配[]中的任意一个字符

例子:匹配(010)88886666022-2233445502912345678,
正则表达式: /\(?0\d{2}[-\)]?\d{8}/

分支条件

上述表达式中也能匹配010)12345678(022-87654321这样的“不正确”的格式。要解决这个问题要用到分支条件。所以上述的正则表达式可以改写为/\(?0\d{2}\)[-]?\d{8}|0\d{2}[-]?\d{8}/

符号 含义
` `

分组

重复多个字符时,可以使用()来表示。比如:(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配。
然而像256.300.888.999这种不可能存在的IP地址。所以我们改写一下,一个正确的IP地址正则表达式应该是/((2[0-4]\d|25[0-5]|[01]?\d?\d)\.){3}(2[0-4]\d|25[0-5]|[01]?\d?\d)/

反义

符号 含义
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是捕获的内容)。默认情况下,每个分组会自动拥有一个组号,规则是:从左往右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推

符号 含义
\1 \2 \3 ... \n 表示匹配第N个出现的捕获组
\k<Word> 自定义捕获组
(?:exp) 表示匹配exp,但不捕获匹配的文本,也不给此分组分配组号

(这里面的性质JavaScript暂不支持)也可以指定子表达式的组名。比如:<Word>\w+要引用这个自定义的子表达式可以用\k<Word>

零宽断言

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(断言),因此它们也被称为零宽断言

符号 含义
(?=exp) 也叫零宽度正预测先行断言,匹配符合exp的前面的正则的内容。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的\w+部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。
(?<=exp) 也叫零宽度正回顾后发断言,它的作用与(?=exp)相反,匹配符合exp之后的正则的内容。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,他会匹配ading。(这里面的性质JavaScript暂不支持)

负向零宽断言

符号 含义
(?!exp) 也叫零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字。
(?<!exp) 也叫零宽度负回顾后发断言,与上面的(?!exp)含义相反,表示断言此位置的前面不能匹配表达式exp。例如:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字(这里面的性质JavaScript暂不支持)

参考链接:

posted @ 2017-07-17 00:17  海枯  阅读(174)  评论(0编辑  收藏  举报