正则表达式中的特殊字符
-
“\” 做为转意,即通常在""后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如""匹配它前面元字符0次或多次,/a/将匹配a,aa,aaa,加了""后,/a*/将只匹配"a*"。 -
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
-
$匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
-
*匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
-
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
-
(x) 匹配x保存x在名为9的变量中
-
x|y 匹配x或y
-
{n} 精确匹配n次
-
{n,} 匹配n次以上
-
{n,m} 匹配n-m次
-
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
-
[^xyz] 不匹配这个集合中的任何一个字符
-
[\b] 匹配一个退格符
-
\b 匹配一个单词的边界
-
\B 匹配一个单词的非边界
-
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
-
\d 匹配一个字数字符,/\d/ = /[0-9]/
-
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
-
\n 匹配一个换行符
-
\r 匹配一个回车符
-
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
-
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
-
\t 匹配一个制表符
-
\v 匹配一个重直制表符
-
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
-
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]
正则表达式是一个描述字符模式的对象。
1.字符类
将单独的直接符放进中括号内就可以组合成字符类.一个字符类和它所包含的任何一个字符都匹配,所以正则表达式 / [abc] / 和字母 "a" , "b" , "c" 中的任何一个都匹配.另外还可以定义否定字符类,这些类匹配的是除那些包含在中括号之内的字符外的所有字符.定义否定字符尖时,要将一个 ^ 符号作为从左中括号算起的第一个字符.正则表达式的集合是 / [a-zA-z0-9] / .
由于某些字符类非常常用,所以JavaScript的正则表达式语法包含一些特殊字符和转义序列来表示这些常用的类.例如, \s 匹配的是空格符,制表符和其它空白符, \s 匹配的则是空白符之外的任何字符.
正则表灰式的字符类
- [...] 位于括号之内的任意字符
- [^...] 不在括号之中的任意字符
- . 除了换行符之外的任意字符,等价于[^\n]
- \w 任何单字字符, 等价于[a-zA-Z0-9]
- \W 任何非单字字符,等价于[^a-zA-Z0-9]
- \s 任何空白符,等价于[\ t \ n \ r \ f \ v]
- \S 任何非空白符,等价于[^\ t \ n \ r \ f \ v]
- \d 任何数字,等价于[0-9]
- \D 除了数字之外的任何字符,等价于[^0-9]
- [\b] 一个退格直接量(特例)
2.复制
用以上的正则表式的语法,可以把两位数描述成 / \ d \ d /,把四位数描述成 / \d \ d \ d \ d /.但我们还没有一种方法可以用来描述具有任意多数位的数字或者是一个字符串.这个串由三个字符以及跟随在字母之后的一位数字构成.这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数.
指定复制的字符总是出现在它们所作用的模式后面.由于某种复制类型相当常用.所以有一些特殊的字符专门用于表示它们.例如: +号匹配的就是复制前一模式一次或多次的模式.下面的表列出了复制语法.先看一个例子:
/\d{2, 4}/ //匹配2到4间的数字.
/\w{3} \d?/ //匹配三个单字字符和一个任意的数字.
/\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格.
/[^"] * / //匹配零个或多个非引号字符.
正则表达式的复制字符
- {n, m} 匹配前一项至少n次,但是不能超过m次
- {n, } 匹配前一项n次,或者多次
- {n} 匹配前一项恰好n次
- ? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1}
- + 匹配前一项1次或多次,等价于{1,}
- * 匹配前一项0次或多次.等价于{0,}
3.指定匹配的位置
我们已经看到了,一个正则表达式中的许多元素才能够匹配字符串的一个字符.例如: \s 匹配的只是一个空白符.还有一些正则表达式的元素匹配的是字符之间宽度为0的空间,而不是实际的字符例如: \b 匹配的是一个词语的边界,也就是处于一个/w字字符和一个\w非字字符之间的边界.像\b 这样的字符并不指定任何一个匹配了的字符串中的字符,它们指定的是匹配所发生的合法位置.有时我们称这些元素为正则表达式的锚.因为它们将模式定位在检索字符串中的一个特定位置.最常用的锚元素是 ^, 它使模式依赖于字符串的开头,而锚元素$则使模式定位在字符串的末尾.
例如:要匹配词 "javascript" ,我们可以使用正则表达式 /^ javascript $/. 如果我们想检索 "java" 这个词自身 (不像在 "javascript" 中那样作为前缀),那么我们可以使用模式 /\s java \s /, 它要求在词语java之前和之后都有空格.但是这样作有两个问题.第一: 如果 "java" 出现在一个字符的开头或者是结尾.该模式就不会与之匹配,除非在开头和结尾处有一个空格. 第二: 当这个模式找到一个与之匹配的字符时,它返回的匹配的字符串前端和后端都有空格,这并不是我们想要的.因此,我们使用词语的边界 \b 来代替真正的空格符 \s 进行匹配. 结果表达式是 /\b java \b/.
正则表达式的锚字符
- ^ 匹配的是字符的开头,在多行检索中,匹配的是一行的开头
- $ 匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾
- \b 匹配的是一个词语的边界.简而言之就是位于字符\w 和 \w之间的位置(注意:[\b]匹配的是退格符)
- \B 匹配的是非词语的边界的字符
4.属性
有关正则表达式的语法还有最后一个元素,那就是正则表达式的属性,它说明的是高级模式匹配的规则.和其它正则表达式语法不同,属性是在 / 符号之外说明的.即它们不出现在两个斜杠之间,而是位于第二个斜杠之后.javascript 1.2支持两个属性.属性 i 说明模式匹配应该是大小写不敏感的.属性 g 说明模式匹配应该是全局的.也是说,应该找出被检索的字符串中所有的匹配.这两种属性联合起来就可以执行一个全局的,大小写不敏感的匹配.
例如: 要执行一个大小不敏感的检索以找到词语 "java" (或者是 "java" 、"JAVA"等) 的第一个具体值,我们可以使用大小不敏感的正则表达式 /\b java\b/i .如果要在一个字符串中找到 "java" 所有的具体值,我们还可以添加属性 g, 即 /\b java \b/gi .
正则表达式的属性
- i 执行大小写不敏感的匹配
- g 执行一个全局的匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了
javascript的17种正则表达式
- "^\d+$" //非负整数(正整数 + 0)
- "^[0-9]*[1-9][0-9]*$" //正整数
- "^((-\d+)|(0+))$" //非正整数(负整数 + 0)
- "^-[0-9]*[1-9][0-9]*$" //负整数
- "^-?\d+$" //整数
- "^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)
- "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数
- "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)
- "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
- "^(-?\d+)(\.\d+)?$" //浮点数
- "^[A-Za-z]+$" //由26个英文字母组成的字符串
- "^[A-Z]+$" //由26个英文字母的大写组成的字符串
- "^[a-z]+$" //由26个英文字母的小写组成的字符串
- "^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
- "^\w+$" //由数字、26个英文字母或者下划线组成的字符串
- "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
- "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
网友评论