正则表达式-札记

正则表达式-----笔记
第七章 正则表达式

一、正则表达式的支持
var reg=new RegExp("cat")//匹配字符串中第一次出现的cat
var reg=new RegExp("cat","g")//“g”是global的缩写,匹配字符串中所有cat
var reg=new RegExp("cat","gi")//i表示不区分大小写
var reg=/cat/gi;//Perl风格写法

test() 返回true、false
exec() 返回数组
match() 返回一个包含在字符串中所有匹配的数组
search() 返回第一次出现的索引

为什么有些符号必须转义,因为这些符号是元字符,元字符是正则表达式中一部分
元字符有:([{\^$|)?*+.
因此:var icg=/\?/ 或者  =new RegExp("\\?")注意这里面一个斜杠和两个斜杠的区别

二、字符类
1.简单类
var a=/[abc]de/gi;   [...]中会选择性匹配
2.负向类
var a=/[^abc]de/gi;   [...]不会匹配
3.范围类
[a-z][A-Z][0-9]
4.组合类
[a-zA-Z0-9]
5.预定义类
.->[^\n\r]除了换行和回车之外的任意字符
\d->[0-9]数字
\D->[^0-9]非数字
\s->[ \t\n\x0B\f\r]空白字符
\S->[^ \t\n\x0B\f\r]非空白字符
\w->[a-zA-Z0-9]单词字符
\W->[^a-zA-Z0-9]非单词字符

简单量词:
?  ->出现0次或1次
*  ->出现0次或多次
+  ->出现1次或多次
{n}  ->一定出现n次
{n,m}  ->至少出现n次不超过m次
{n,}  ->至少出现n次

eg:   /b?cds?d/=/b{0,1}cds{0,1}d/

贪婪量词:先看整个字符串是不是一个匹配,不是的话,减去最后一个字符,再匹配,类似循环,直到结束。符号表示同简单量词
惰性量词:先看字符串中第一个字母是不是匹配,不是的话,继续读入下一个字符,再匹配,类似循环,直到结束。在简单量词后面加"?"号
支配量词:只尝试匹配整个字符串。在简单量词后面加"+"号

候选符号:|
边界符:
^   行开头
$   行结尾
\b  单词边界
\B  非单词边界

三、RegExp对象
1.实例属性
global(g)------Boolean值,表示全局选项是否设置
ignoreCase(i)-----Boolean值,表示是否忽略大小写
lastIndex---------整数,代表下次匹配会从那个字符开始,也就是当前匹配的最后索引值(尽在使用exec() or test()函数才会填入,否则默认为0,即从头开始匹配)
multiline(m)-----Boolean值,表示是否是国航匹配模式
source---源字符串形式

2.静态属性
长名-----------------短名-----描述
input---------------$_      最后用于匹配的字符串(传递给exec() or test()的字符串)
lastMatch-----------$&      最后匹配的字符
pastParen-----------$+      最后匹配的分组
leftContext---------$`      在上次匹配的前面的子串
multiline-----------$*      是否启用多行模式
rightContext--------$'      在上次匹配的后面的子串
eg:
var sToMatch="this has been a short,short number";
var reShort=/(s)hort/g;
reShort.test(sToMatch);
alert(RegExp.input);  或者  alert(RegExp.$_);   //返回"this has been a short,short number"
alert(RegExp.leftContext);  或者  alert(RegExp["$`"]);   //返回"this has been a "
alert(RegExp.rightContext);  或者  alert(RegExp["$'"]);   //返回",short number"
alert(RegExp.lastMatch);  或者  alert(RegExp["$&"]);   //返回"short"
alert(RegExp.pastParen);  或者  alert(RegExp["$+"]);   //返回"s"