1、 正则表达式元字符:
( { { / ^ $ | } ? * + .
2、 特殊字符:
/t 制表符
/n 换行符
/r 回车符
/f 换页符
/a alert字符
/e escape字符
/cX 与X相对应的控制字符
/b 回退字符
/v 垂直制表符
/0 空字符
注意:如果通过RegExp构造函数来使用它们,则都必须进行双重转义。
3、 字符类:
3.1简单类
例:假设想匹配”bat”,”cat”,”fat”。使用简单类就可以方便的解决问题:
var sToMatch=”a bat,a cat,a fat bat,a fat cat”;
var reBatCatRat=/[bcf]at/gi;
var arrMatches= sToMatch.match(reBatCatRat);
其中arrMatches数组现在存放了这些值:”bat”,”cat”,”fat”,”bat”,”fat”,”cat”。
3.2负向类(negation class)
例,同上,如果只想获取包含at但不能以b或c开头单词。
var sToMatch=”a bat,a cat,a fat bat,a fat cat”;
var reBatCatRat=/[^bc]at/gi;
var arrMatches= sToMatch.match(reBatCatRat);
其中arrMatches数组现在存放了这些值:”fat”,”fat”。
3.3范围类(range class)
例,要测试的字符恰好按照字符编码的顺序排列的时候,范围类就很管用。
var sToMatch=”n1,n2,n3,n4,n5,n6,n7,n8,n9”;
var reBatCatRat=/n[1-4]/gi;
var arrMatches= sToMatch.match(reBatCatRat);
其中arrMatches数组现在存放了这些值:”n1”,”n2”,”n3”,”n4”。
3.4组合类(combination class)
如:[a-m1-4/n]
主意:在内部的类之间不要有空格。
Javascript/ECMAScript不支持某些其他正则表达式实现中的联合类(union class)和交叉类(intersection class)。这意味着不能有类似[a-m[p-z]]或者[a-m[^b-e]之类的模式出现。
3.5预定义类
如下表:
代码 |
等同于 |
匹配 |
. |
[^/n/r] |
除了换行和回车之外的任意字符 |
/d |
[0-9] |
数字 |
/D |
[^0-9] |
非数字字符 |
/s |
[/t/n/x0B/f/r] |
空白字符 |
/S |
[^/t/n/x0B/f/r] |
非空白字符 |
/w |
[a-zA-Z_0-9] |
单词字符 |
/W |
[^a-zA-Z_0-9] |
非单词字符 |
4、 量词(quantifier)
可以指定某个特定模式出现的次数。
4.1简单量词
代码 |
描述 |
? |
出现零次或一次 |
* |
出现零次或多次(任意次) |
+ |
出现一次或多次(至少出现一次) |
{n} |
一定出现n次 |
{n,m} |
至少出现n次但不超过m次 |
{n,} |
至少出现n次 |
4.2贪婪的、惰性的、支配性的量词
贪婪 |
惰性 |
支配 |
描述 |
? |
?? |
?+ |
出现零次或一次 |
* |
*? |
*+ |
出现零次或多次(任意次) |
+ |
+? |
++ |
出现一次或多次(至少出现一次) |
{n} |
{n}? |
{n}+ |
一定出现n次 |
{n,m} |
{n,m}? |
{n,m}+ |
至少出现n次但不超过m次 |
{n,} |
{n,}? |
{n,}+ |
至少出现n次 |
注意:浏览器对支配量词的支持还很不完善,IE和Opera不支持支配量词,如果要用它,就会抛出一个错误。Mozilla不会产生错误,但是它会将支配量词看着实贪婪的。
另外:还有一些复杂模式:如分组,反向应用,候选,非捕获性分组,前瞻,边界,多行模式等