JS正则表达式
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:1. 灵活性、逻辑性和功能性非常的强;2. 可以迅速地用极简单的方式达到字符串的复杂控制。3. 对于刚接触的人来说有点难。
用途
那么正则表达式的用途是什么?
最常见的就是windows查询,例如想查询“廊坊师院12教.jpg”,我们可以使用“廊坊师??2*.jpg”。
SQLServer中也有类似功能,例如:
SELECT TOP 1000 [cityID]
,[proID]
,[cityName]
FROM[beidaqingniao].[dbo].[chengshi]
where cityID like '[^6-9]'
再者,我们也可以用正则表达式检测email、邮编等的格式。
对正则的分类
其实正则表达式的语法没分这么多类,但是为了更好的区分和理解其中的语法,故分成这些类别。
标识符
在JavaScript中,正则表达式的标识符是/ /;在VBScript中,通常采用的标识符是“ ”。
作用范围
如果不加范围,默认从开始位置查找第一个符合正则表达式的结果;加上g(global,/ /g),是从整个语句中获取结果;加上i(自认为是ignore,/ /i)可以忽略大小写。
优先级
自上而下优先级依次降低。
操作符 |
\ |
(), (?:), (?=), [] |
*, +, ?, {n}, {n,}, {n,m} |
^, $, \anymetacharacter |
| |
位置
^x表示以x开始;x$表示以x结尾。
数量
.代表任意一个字符;\d{6}6个数字;x{n,m}n-m个x;x{n,}n个以上x;x?表示有或没有x;+表示一个以上;*表示0个以及上;
类型
\d数字;\D非数字;\s表示space键;\表示非space键(其它类似,小写表示是,大写表示非)。
操作
[]字符集多选一,[a-z]a到z中间的一个字符(类似还有[A-Z],[0-9]),[^XXX]表示非[]中的字符(注意与位置中的^分开),x|y表示选择x或y。
正则表达式字符
普通字符:常用的包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。
特殊字符:
特殊字符 |
说明 |
$ |
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n'或 '\r'。要匹配 $字符本身,请使用 \$。 |
( ) |
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \(和 \)。 |
* |
匹配前面的子表达式零次或多次。要匹配 *字符,请使用 \*。 |
+ |
匹配前面的子表达式一次或多次。要匹配 +字符,请使用 \+。 |
. |
匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。 |
[ |
标记一个中括号表达式的开始。要匹配 [,请使用 \[。 |
? |
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ?字符,请使用 \?。 |
\ |
将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制转义符。例如, 'n'匹配字符 'n'。'\n'匹配换行符。序列 '\\'匹配 "\",而 '\('则匹配 "("。 |
^ |
匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^字符本身,请使用 \^。 |
{ |
标记限定符表达式的开始。要匹配 {,请使用 \{。 |
| |
指明两项之间的一个选择。要匹配 |,请使用 \|。 |
非打印字符:
字符 |
含义 |
\cx |
匹配由x指明的控制字符。例如, \cM匹配一个 Control-M或回车符。 x 的值必须为 A-Z 或 a-z之一。否则,将 c视为一个原义的 'c'字符。 |
\f |
匹配一个换页符。等价于 \x0c和 \cL。 |
\n |
匹配一个换行符。等价于 \x0a和 \cJ。 |
\r |
匹配一个回车符。等价于 \x0d和 \cM。 |
\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S |
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\t |
匹配一个制表符。等价于 \x09和 \cI。 |
\v |
匹配一个垂直制表符。等价于 \x0b和 \cK。 |
限定符:
字符 |
描述 |
* |
匹配前面的子表达式零次或多次。例如,zo*能匹配 "z"以及 "zoo"。 *等价于{0,}。 |
+ |
匹配前面的子表达式一次或多次。例如,'zo+'能匹配 "zo"以及 "zoo",但不能匹配 "z"。+等价于 {1,}。 |
? |
匹配前面的子表达式零次或一次。例如,"do(es)?"可以匹配 "do"或 "does"中的"do"。?等价于 {0,1}。 |
{n} |
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}'不能匹配 "Bob"中的 'o',但是能匹配 "food"中的两个 o。 |
{n,} |
n 是一个非负整数。至少匹配n 次。例如,'o{2,}'不能匹配 "Bob"中的 'o',但能匹配 "foooood"中的所有 o。'o{1,}'等价于 'o+'。'o{0,}'则等价于 'o*'。 |
{n,m} |
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood"中的前三个 o。'o{0,1}'等价于 'o?'。请注意在逗号和两个数之间不能有空格。 |
定位符:
字符 |
描述 |
^ |
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^也匹配 '\n'或 '\r'之后的位置。 |
$ |
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$也匹配 '\n'或 '\r'之前的位置。 |
\b |
匹配一个单词边界,也就是指单词和空格间的位置。 |
\B |
匹配非单词边界。 |
实例
QQ号:/\d{5,}/ ,表示由五位以上数字组成。
固定电话:/(\d{3}|\d{4})-\d{7}/g,表示区号为4或3位数字,号码由7位数字组成。
中文检测:[\u4e00-\u9f5a]。代表了符合汉字GB18030规范的unicode字符集。
为空检测:/^ +$/g。表示首字符、中间和尾字符都是“ ”。
email:/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/ 或者/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/。