正则表达式-字符

阅读: 4042    发布时间: 2018-01-26 11:50:56

匹配包含某些字符的正则表达式

假设我们想查找一个字符串中是否含有“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 匹配版权符号 (?)。