10.1正则表达式支持
10.1.1使用RegExp对象
例:
Var match=”cat”; Var reCat=/cat/;
或 reCat=new RegExp(“cat”); Alert(reCat.test(match));//
RegExp的test方法测试字符串是否匹配这个模式。 Var match=”a bat,a Cat,a fAt bat,a faT cat”; Var reAt=/at/;
Var arrMatches=reAt.exec(match);
RegExp对象的exce方法返回一个数组,数组中的第一条目是第一
个匹配;其他的是反向引用。
String对象数组有的match()方法,它会返回一个包含所有字符串
中的所有匹配的数组。
Var s=”a bat,a Cat,a fAt bat,a faT cat”; Var reAt=/at/gi;
或 reCat=new RegExp(“cat”,”gi”); Var arr=s.match(reAt);
String对象的Search()字符串方法返回在字符串中出现的一个匹
配的位置。
Alert(s.search(reAt)); 10.1.2扩展的字符串方法
String对象的replace()和split()方法都可以传递正则表达式。 这里的replace()方法的第二个参数可以传递一个函数。这处函数可
以接受一个参数,即匹配了的文本,并返回应当进行替换的文本
var tt=”The sky os red”; var re=/red/;
var sText=tt.replace(re,function(sMatch){ return “blu
e”;});
sMatch这个参数就是用模式re匹配后的文本!!
10.2简单模式
10.2.2元字符
正则表达式的元字符是正则表达式语法的一部分。 ( [ { \\ ^ $ | } ? * + .
任何时候要在正则表达式中使用元字符都必须对它们进行转义用?
\\?。
Var retest=/\\?/;
或var retest=new RegExp(“\\\\?”);//必须用两个反斜杠,如果
用的一个反斜杠,那么JS解释器会按照\\n的方式翻译\\?.
10.2.2使用特殊字符
转义字符
10.2.3字符类
就是把一些字符放入方括号中,然后正则表达式去匹配里面的各个
字符。也即只能匹配方括号中的任意一个字符,不是同时匹配全部啊!!!
1.简单类
例:[adf]等
2.负向类
例:[^adf]等,告诉正则表达式不能匹配脱字符^后面跟着的
字符。
3.范围类
例:[a-z] [A-Z] [0-9] [^b-z]等
4.组合类
例 [a-m1-4\\n]注意各个内部类之间没有空格。
5.预定义类
代码 .
等同于
匹配
除了换行和回车之外的任意字
[^\\n\\r]
符
\\d \\D
[0-9] [^0-9]
数字
非数字
\\s \\S \\w
[\\t\\n\\f\\r\\x0b] 空白符
非空白符
[^\\t\\n\\f\\r\\x0b] [a-xA-Z_0-9]
单词字符 (有可能匹配汉字)
看语言支持Unicode字段否
\\W
[^a-xA-Z_0-9]
非单词字符
10.2.4量词
1.简单量词 代码 ? * + {n}
描述
出现零次或一次
出现零次或多次(任意次) 出现一次或多次
刚好出现n次
{n,m} {n,}
至少出现n次,至多m次
至少出现n次
2.贪婪的、惰性的和支配性量词
贪婪性量词先看整个字符串是否匹配,如果没有匹配,它先去掉该
字符串最后一个字符,并再次尝试。这个过程一直重复下去。
惰性量词先看字符中的第一个字符是否匹配,如果不匹配,就读入
下一个量词,组成两个字符的字符串,再比匹配。这个过程一直重复下去,直到匹配或没有匹配。
支匹配性量词只尝试匹配整个字符串,如果整个字符串不能产生匹
配,不做进一步尝试。 贪婪 ? * + {n}
惰性 ?? *? +?
支配 ?+ *+ ++
{n}+
{n}?
{n,m} {n,} 例:
{n,m}?
{n,m}+ {n,}+
{n,}?
Var sToMatch=”abbbaabbbaaabbb1234”; Var re1=/.*bbb/g; Var re2=/.*?bbb/g; Var re3=/.*+bbb/g;
如果想获得的匹配是”abbb”,”aabbb”,”aaabbb”,这三个表达式中只有
re2能匹配成功。
10.2.5标志
字符 i
含义
执行不区分大小定的匹配