匹配包含某些字符的正则表达式
假设我们想查找一个字符串中是否含有“a”或者"b" 或者"c"其中的一个,我们可以这样写“[abc]+”
中括号代表其中为字符集,"[abc]"匹配字符“a”或者"b" 或者"c"
"+",意味着出现1次及以上
var patt=/[abc]+/ alert( patt.test("a")) //返回true alert( patt.test("abcde")) //返回true alert( patt.test("def")) //返回false
假如我们想让用户输入的用户名必须是小写字母a-z,长度为6-30,可以这么写"[a-z]{6,30}"
var patt=/[a-z]{6,30}/ alert( patt.test("a")) //返回false alert( patt.test("adcdefgh")) //返回true alert( patt.test("abcDEFgh")) //返回false
假如我们想让用户输入的用户名必须是小写字母a-z,大些字母A-Z,数字0-9,长度为6-30,可以这么写"[a-zA-Z0-9]{6,30}"
var patt=/[a-zA-Z0-9]{6,30}/ alert( patt.test("abcd123")) //返回true alert( patt.test("ABcde123")) //返回true alert( patt.test("123456789")) //返回true
上面的表达式还可以简化成“\w{6,30}”,“\w”匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'
var patt=/\w{6,30}/ alert( patt.test("_abcd123")) //返回true alert( patt.test("ABCDefg123")) //返回true alert( patt.test("123456789")) //返回true
0-9的数字还可以用“\d”表示,比如手机号,我们匹配第一位是1,后面是10个数字的字符串,“1\d{10}”
var patt=/1\d{10}/ alert( patt.test("12222")) //返回false alert( patt.test("15600059988")) //返回true alert( patt.test("1560005998e")) //返回false
还有一个重要的元字符“.”,匹配除换行符(\n、\r)之外的任何单个字符
匹配不包含某些字符的正则表达式
前面我们都是匹配包含某些字符的表达式,比如"[abc]"匹配包含字符abc的字符串,“[^abc]”则匹配不包含abc的字符串,“[^abc]+”,非字符abc出现1次及以上
var patt=/[^abc]+/ alert( patt.test("abc")) //返回false alert( patt.test("a23")) //返回true alert( patt.test("def")) //返回true alert( patt.test("123")) //返回true
同样的"[^a-z]",匹配非小写字母,"[^a-zA-Z]",匹配非字母
var patt=/[^a-zA-Z]+/ alert( patt.test("abc")) alert( patt.test("Abc")) alert( patt.test("123"))
“\w”匹配字母数字下划线,“\W”匹配非字母数字下划线
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\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。 |
\w | 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。 |
\W | 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。 |
\xn | 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。 |
\num | 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。 |
\n | 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 |
\nm | 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。 |
\nml | 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 |
\un | 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。 |