网上正则表达式的教程够多了,但由于javascript的历史比较悠久,也比较古老,因此有许多特性是不支持的。我们先从最简单地说起,文章所演示的正则基本都是perl方式。
元字符
( [ { \ ^ $ | ) ? * + .
预定义的特殊字符
字符 |
正则 |
描述 |
\t |
/\t/ |
制表符 |
\n |
/\n/ |
制表符 |
\r |
/\r/ |
回车符 |
\f |
/\f/ |
换页符 |
\a |
/\a/ |
alert字符 |
\e |
/\e/ |
escape字符 |
\cX |
/\cX/ |
与X相对应的控制字符 |
\b |
/\b/ |
与回退字符 |
\v |
/\v/ |
垂直制表符 |
\0 |
/\0/ |
空字符 |
字符类
简单类
原则上正则的一个字符对应一个字符,我们可以用[]把它们括起来,让[]这个整体对应一个字符。如
alert(/ruby/.test( "ruby" )); |
alert(/[abc]/.test( "a" )); |
alert(/[abc]/.test( "b" )); |
alert(/[abc]/.test( "c" )); |
alert( "a bat ,a Cat,a fAt bat ,a faT cat" .match(/[bcf]at/gi)); |
负向类
也是在那个括号里做文章,前面加个元字符进行取反,表示匹配不能为括号里面的字符。
alert(/[^abc]/.test( "a" )); |
alert(/[^abc]/.test( "b" )); |
alert(/[^abc]/.test( "6" )); |
alert(/[^abc]/.test( "gg" )); |
范围类
还是在那个中括号里面做文章。有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以用它。特征就是在中间加了个横线。
组合类
还是在那个中括号里面做文章。允许用中括号匹配不同类型的单个字符。
alert(/[a-f]/.test( "b" )); |
alert(/[a-f]/.test( "k" )); |
alert(/[a-z]/.test( "h" )); |
alert(/[A-Z]/.test( "gg" )); |
alert(/[^H-Y]/.test( "G" )); |
alert(/[0-9]/.test( "8" )); |
alert(/[^7-9]/.test( "6" )); |
alert(/[a-m1-5\n]/.test( "a" )) |
alert(/[a-m1-5\n]/.test( "3" )) |
alert(/[a-m1-5\n]/.test(a)) |
alert(/[a-m1-5\n]/.test( "r" )) |
预定义类
还是在那个中括号里面做文章,不过它好像已经走到尽头了。由于是中括号的马甲,因此它们还是对应一个字符。
字符 |
等同于 |
描述 |
. |
[^\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] |
非单词字符 |
量词
由于元字符与特殊字符或字符类或者它们的组合(中括号)甚至它们的马甲(预定义类)都是一对一进行匹配。我们要匹配“司徒正美这个词”,最简单都要/..../,如果长到50多个字符岂不是要死人。因此我们逼切需要一个简单的操作,来处理这数量关系。
(责任编辑:admin) |