正则表达式基础

 javascript 的正则表达式是通过ECMAScript中的RegExp类实现的,可以接受两个参数,第一个个进行匹配的模式字符串,第二个额外的处理指令。

如:

var color=new RegExp("color","gi");  //g 是全局 i是不区分大小写

 

正则表达式有三个方法:

test: 返回true 或false

/color/.test("color");  //true

 

exec: 返回一个数组 数组中的第一个条目是第一个匹配,其他的是反向引用

/color/.exec("color , iam  color");  //["color"]

 

match:返回一个包含在字符串中的所有匹配的数组

"color i an colore".match(/color/gi);//["color","color"];

 

search: 与indexOf类似

"youcolor i an colore".search(/color/gi) //3

 

元字符

{ [ ( )  \ ^ $ | ? * + .

如果需要使用需要转义 如: \?

 

字符串中的字母可以用十六进制或者八进制:十六进制加 \x  八进制加 \

如: b 的十六机制是ASCII是62  可以表示为 \x62    /\x62/.test("blur") //true

      b的八进制是142 可以表示为  /\142/.test("blur") //true

如果用 unicode表示为:

     b的Unicode为 \u0062   /\u0062/.test("blur") //true

 

预定义的特殊字符

 
\t 制表符
\n 换行符
\r 回车符
\f 换页符
\a alert字符
\e escape字符
\cX 与X相对应的字符
\b 回退字符
\v 垂直制表符
\0 空字符
字符 描述

替换所有的换行符  " dfdsafdsaf \n fdsaf\n ".replace(/\n/gi,"")

 

字符类

1:简单类:

/[abc]olor/gi

2:负向类

/[^abc]olor/gi

3:范围类

[a-z]

4:组合类(内部之间不可有空格)

[a-zA-Z_]

5:预定义类

代码 等同于 匹配
. [^\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] 非单词字符

 

 

量词

1:简单量词

代码 描述
? 出现0次或一次
* 零次或多次(任意数)
+ 一次或多次(至少出现一次)
{n} 一定出现n次
{n,} 至少出现n次
{n,m} 至少出现n次但不超过m次

 

 

2:贪婪,惰性,支配(单个是贪婪 加上?号是惰性 加上+是支配)

贪婪 惰性 支配 描述
? ?? ?+ 零次或一次出现
* *? *+ 零次或多次出现
+ +? ++ 一次或多次出现
{n} {n}? {n}+ 恰好n次出现
{n,} {n,}? {n,}+ 至少n次出现
{n,m} {n,m}? {n,m}+ 至少n次最多m次
       

 

复杂模式


1:分组

/(dog)[2]/g

 

2:反向引用

/#(\d+)/.test("#1234567") ;//true   RegExp.$1 1234567

/(dog)\1/g  -> /dogdog/g

 

"1234 5678".replace(/(\d{4}) (\d{4})/g,"$2 $1")  // 5678 1234

 

候选

/red|black/gi

非捕获性数组(左括号的后门加上一个?:)

/#(?:/d+)/g

 

前瞻(正向表示接下来是什么?=,负向表示接下来不是什么?!,写在(?=和)之间) 

/(bed(?=room))/g , /(bed(?!room))/g这不是分组,分组不会考虑前瞻的

 

边界

边界 描述
^ 行开头
$ 行结尾
\b 单词边界
\B 非单词边界

 

如:/(\w+)\.$/g  行结尾前跟着.的单词

 

多行模式(m)

/red/gm

 

实例属性 


global--bool g 全局

ignoreCase --bool i 大小写

laseIndex --整数 代表下次从哪个地方开始(exec和test才用到)

multiline -- bool m 多行

source:正则表达式的源字符串形式{ /[ba]*/i.global --false /[ba]*/i.ignoreCase --true   }

 

posted @ 2015-06-07 22:48  zhongpingwang  阅读(145)  评论(0编辑  收藏  举报