核心提示:正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于RegExp的exec和test方法,以及String的match、replace、searc...
       
        正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于RegExp的exec和test方法,以及String的match、replace、search和split方法。本章介绍 javascript正则表达式。
	
	| 语法: | /pattern/flags /正则表达式主体/修饰符(可选) -- 正则表达式字面量 或者使用 new RegExp(pattern [, flags]) | 
	
	| 修饰符(flags): | 
	
		
		| i | 执行对大小写不敏感的匹配 |  
		| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |  
		| m | 执行多行匹配 |    | 
	
	| 模式表达式: | 
	
		
		| [abc] | 等价[a-c],查找方括号之间的任何字符。要匹配 [,请使用 \[ |  
		| [0-9] | 查找任何从 0至 9的数字。 |  
		| [^xyz] | 一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。你可以使用破折号(-)来指定一个字符范围。任何普通字符在这里都是起作用的。 例如,[^abc] 和 [^a-c] 是一样的。他们匹配"brisket"中得‘r’,也匹配“chop”中的‘h’。 |  
		| [\b] | 匹配一个退格(U+0008)。(不要和\b混淆了。) |  
		| (x) |   括号内表示子表达式的开始和结束位置。x是子表达式,相应的子匹配被记住,用作以后引用使用。要匹配括号,使用\(和\) 括号的作用: 
		匹配 'x'并且记住匹配项,在检索到的陪配中抽取括号中的匹配。回调这些括号中匹配的子串,使用数组元素[1],……[n]允许在同一正则表达式的后部引用前面的子表达式。通过字符“\”后加一位或多位数字实现,如\1和\2表示带圆括号的子表达式在正则表达式中的位置(左括号位置)。如要匹配左侧引号:/(['"])[^'"]*\1/模式 /(foo) (bar) \1 \2/ 中的 '(foo)' 和 '(bar)' 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的 \1 和 \2 匹配字符串的后两个单词。注意 \1、\2、\n 是用在正则表达式的匹配环节。在正则表达式的替换环节,则要使用像 $1、$2、$n 这样的语法,例如,'bar foo'.replace( /(...) (...)/, '$2 $1' )。
		  |  
		| (?:x) | 匹配 'x' 但是不记忆匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式/(?:foo){1,2}/。如果表达式是/foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。 |  
		| x(?=y) | 匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。 例如,/Jack(?=Sprat)/会匹配到'Jack'仅仅当它后面跟着'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着'Sprat'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。 |  
	
		
		| x(?!y) | 匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。 例如,/\d+(?!\.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!\.)/.exec("3.141")匹配‘141’但是不是‘3.141’ |  | 
	
	| 特殊字符: | 
	
		
		| ^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^字符本身,请使用 \^。 |  
		| $ | 匹配输入字符串的结尾位置。如果设置了 RegExp对象的 Multiline属性,则 $也匹配 '\n'或 '\r'。要匹配 $字符本身,请使用\$。 |  
		| \b | 匹配一个字边界,即字与空格间的位置。如:"big right",匹配边界ig而非中间ig,且边界空格在后面,用/ig\b/。 |  
		| \B | 非字边界匹配。对于 \B非字边界运算符,位置并不重要,只要是非边界就可以。 |  
		| ? | 等价{0,1},匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 |  
		| * | 等价{0, },匹配前面的子表达式零次或多次。要匹配 *字符,请使用 \*。 |  
		| + | 等价{1,},匹配前面的子表达式一次或多次。要匹配 +字符,请使用 \+。 |  
		| {n} | n 是一个非负整数。匹配确定的 n次。 |  
		| {n, } | n 是一个非负整数。至少匹配n次。 |  
		| {n, m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n次且最多匹配 m次。 |  
		| . | 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \.。 |  
		| \ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n'匹配字符 'n'。'\n'匹配换行符。序列 '\\'匹配 "\",而 '\('则匹配 "("。 |  
		| | | 指明两项之间的一个选择。要匹配 |,请使用 \|。 |  
		| \cX | 当X是处于A到Z之间的字符的时候,匹配字符串中的一个控制符。 例如,/\cM/匹配字符串中的 control-M (U+000D)。 |  
		| \d | 匹配一个数字。 等价于[0-9]。 例如,/\d/或者/[0-9]/匹配"B2 is the suite number."中的'2'。 |  
		| \D | 匹配一个非数字字符。 等价于[^0-9]。 例如,/\D/或者/[^0-9]/匹配"B2 is the suite number."中的'B'。 |  
		| \f | 匹配一个换页符 (U+000C)。 |  
		| \n | 匹配一个换行符 (U+000A)。 |  
		| \r | 匹配一个回车符 (U+000D)。 |  
		| \s | 匹配一个空白字符,包括空格、制表符、换页符和换行符。 等价于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。 例如,/\s\w*/匹配"foo bar."中的' bar'。 |  
		| \S | 匹配一个非空白字符。 等价于[^\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。 例如,/\S\w*/匹配"foo bar."中的'foo'。 |  
		| \t | 匹配一个水平制表符 (U+0009)。 |  
		| \v | 匹配一个垂直制表符 (U+000B)。 |  
		| \w | 匹配一个单字字符(字母、数字或者下划线)。 等价于[A-Za-z0-9_]。 例如,/\w/匹配 "apple,"中的 'a',"$5.28,"中的 '5'和 "3D." 中的 '3'。 |  
		| \W | 匹配一个非单字字符。 等价于[^A-Za-z0-9_]。 例如,/\W/或者/[^A-Za-z0-9_]/匹配 "50%."中的 '%'。 |  
		| \n | 当 n是一个正整数,一个返回引用到最后一个与有n插入的正值表达式(counting left parentheses)匹配的副字符串。 比如/apple(,)\sorange\1/匹配"apple, orange, cherry, peach."中的'apple, orange,' 。 |  
		| \0 | 匹配 NULL (U+0000)字符, 不要在这后面跟其它小数,因为\0是一个八进制转义序列。 |  
		| \xhh | 与代码 hh匹配字符(两个十六进制数字) |  
		| \uhhhh | 与代码 hhhh匹配字符(四个十六进制数字)。 |  | 
	
	| 使用正则表达式:   | 
	
		
		| 方法 | 描述 |  
		| exec | 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。 |  
		| test | 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。 |  
		| match | 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。 |  
		| search | 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |  
		| replace | 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |  
		| split | 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。 |  |