和以前个人 Makefile 速查笔记 同样,正则表达式也是相对少用,可是一旦用起来也挺复杂的知识。因此本文记录一下正则表达式的经常使用要点,备查。正则表达式
本文地址:http://www.javashuo.com/article/p-cbihyalg-ep.htmlsegmentfault
匹配单个数字的写法,能够是 “[0-9]
” 也能够是 “\d
”。学习
匹配单个非数字字符,则使用大写 “\D
”。spa
匹配 26 个字母的任意一个,使用 “[a-zA-Z]
”设计
匹配任意一个字符,使用点号 “.
”3d
匹配具体字符,则直接写上去便可。好比 “abcd
” 就是匹配它自己。若是遇到特殊字符,则须要进行转义,转义字符为 “\
”。code
匹配一个字符,使用中括号的作法称为 “字符集”。中括号用于指定一个 “集”,匹配这个集中的一个字符,如十六进制数 “[0-9a-fA-F]
”。字符集内的点表示的是点号自己,但其余的特殊字符仍是须要进行转移,好比反斜杠字符。regexp
若是要表示某个规则的重复,则须要使用量词。使用花括号表示重复次数。好比 8 个数字能够这样表示:“\d{8}
”blog
花括号中的量词能够变化,好比表示 7 到 8 个数字,则表示为 “\d{7,8}
”。表示上限的右值能够不写,好比 “{0,}
” 是合法的,表示大于等于 0 个字符;但试图单独表示上限的 “{,10}
” 则不合法,至少应该写为 “{0,10}
”。ip
加号 “+
” 表示它左边的元素数量为 “一个或多个”,等于 “{1,}
” 的效果。因此加号也是特殊字符。
星号 “*
” 表示它左边的元素数量为 “零个或至少一个”,即 “{0,}
”。
问号 “?
” 表示 “零个或一个”,等同于 “{0,1}
”。
上面的诸如 +
、*
,匹配的时候都会使用 “贪心” 的模式,也就是匹配尽可能多的个数。好比字符串 “55555”,使用 “5+
” 去匹配时,会匹配到它可以找到的最长字符串,即 “55555”。
若是在量词后面加上问号,则使匹配模式变为 “懒惰” 的,也就是匹配最少的。好比使用 “5+?
” 去匹配,则只会找到可以匹配的最小字符 “5”.
如下都是可用的懒惰匹配表达式:+?
, *?
, {n,}?
, {m,n}?
能够把表达式中的一部分 “捕获” 起来,做为宏放在后边引用。使用括号进行定义(捕获),而后再定义的后面使用 “\1
” 进行引用;若是是第二个捕获,则使用 “\2
”,以此类推。
分组通常都会被保存起来,可是当表达式很是长的时候,可能须要明确指明不保存该分组。好比使用这个格式 “(?:THE|The|the)
”,就使用了 “?:
” 标号来表示不要进行命名标记。
使用 “|
” 来连接两个字段,提供 “或” 的逻辑。注意与括号搭配使用
若是在集合 “[...]
” 中使用字符 “^
”,则表示 “非”,如 “[^0-9]
” 等同于 “\D
”。
如下是各类经常使用的单字符匹配列表:
指代类型 | 模式 | 备注 |
---|---|---|
数字 | \d |
|
字母、数字、下划线 | \w |
等效于 “[_a-zA-Z0-9] ” |
非数字 | \D |
|
非字母 | \W |
|
制表符 Tab | \t |
|
Null 字符 | \0 |
|
Backspace | [\b] |
|
空格 | \s |
等效于 “[ \t\n\r] ” |
Return | \r |
|
换行 | \n |
|
单词之间的空白 | \b |
这里只是匹配单词的开始 / 结束,不消耗任何字符 |
任意一个字符 | . |
行结束符没法使用这个符号匹配 |
本小节设计一个概念:断言,又称为 “零宽度断言(zero-width asseration)”。这个概念不匹配字符,而是匹配字符串中的位置。
^
” 表示一行的开始$
” 表示一行的终止好比要匹配单词 “the”,则写 “\bthe\b
”。若是要匹配哥哥中间带 “e” 的单词,则能够写 “\Be\B
”
可使用 “\<
” 匹配单词开头,“\>
” 匹配单词结尾。可是这两个并不建议使用,由于新的匹配器可能不支持。
正则表达式支持输入 unicode 的值,如 “\u00e9
”。注意 unicode 必须有四位十六进制位,大小写都可。Javascript 还支持 “\xe9
” 的写法,然而 “\x00e9
” 则是错误的。