javascript正则表达式学习笔记

阅读更多
1、js中正则表达式的声明
var reg = /abc/;
var reg2 = new RegExp('abc');

2、正则表达式常用的三种模式
i   ignoreCase  忽略大小写
g   global      全局匹配(正常情况下,正则表达式发现第一个匹配项就停止工作,而/g模式下会继续查找)
m   multiline   多行匹配

var reg = /a/i;
      或  var reg = new RegExp("a","i"); //二者等价,匹配第一个a或者A
    
            三者可以混用,如 /ab/ig
     
3、RegExp对象的属性
属性:global       是否设置/g属性
ignoreCase    是否设置/i属性
multiline    是否设置/m属性
lastIndex
source       正则表达式所对应的字符串

4、RegExp对象的方法
exec(string)  返回一个数组,没有匹配则返回null.虽然是数组,但一般情况下只返回的第一个匹配项。这个数组有两个特殊的属性index,input
test(string)  返回boolean,如果存在匹配的字符串,则true,反之false

var reg = /a/;
var text = "xyzabcdea";
alert(reg.lastIndex); // 0  
var matches = reg.exec(text);
alert(matches.length);//1
alert(matches.index)  //3,匹配字符的索引
alert(matches.input)  //"xyzabcdea"  exec传入的字符串
alert(reg.lastIndex); // 4   结合
//当没有匹配时,lastIndex=0,当执行完一次匹配时,因为匹配的字符串的索引为3,所以lastIndex=4,从最后匹配的下一上字符开始查找

再来理解/g模式
var reg = /a/;
var text = "xyzabcdea";
var matches = reg.exec(text);
alert(matches.index)  //3
var matches = reg.exec(text);
alert(matches.index)  //3
//两次输出都为3,虽然执行了两次exec(),但是匹配的都是同一个a

如果改为/g模式,则会查找所有匹配的字符
var reg = /a/g;
var matches = reg.exec(text);
alert(matches.index)  //3
var matches = reg.exec(text);
alert(matches.index)  //8

再来理解/m模式
var reg = /a/;
var text = "xyzab\ncdea";
var matches = reg.exec(text);
alert(matches.index)  //3
var matches = reg.exec(text);
alert(matches.index)  //3

5、支持正则表达式的 String 对象的方法

match 返回一个数组,找到一个或多个正则表达式的匹配。
search 返回匹配字符的索引,没有返回-1。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。

var reg = /a/ig;
var text = 'abcabcA';
alert(text.match(reg));//a,a,A

var reg = /a/;
var text = 'abcabcA';
alert(text.search(reg));//0

注意的是search()方法不支持全局匹配正规表达式(带参数g)。无论查找几次,都找到的是第一个,没有找到返回-1
其实search()跟indexOf()功能差不多,只不过前者支持正则表达式,后者不支持
var reg = /a/g;
var text = 'abcabcA';
alert(text.search(reg));//0
alert(text.search(reg));//0

var reg = /a/;
var text = 'abcabcA';
alert(text.replace(reg,'b'));//bbcabcA

var reg = /a/ig;
var text = 'abcabcA';
alert(text.replace(reg,'b'));//bbcbbcb

//replace第二个参数可以是个函数
var reg = /[<>]/g;
var text = '';
alert(text.replace(reg,function(match,pos,originalText){
switch(match){
case "<":
return "<";
case ">":
return ">";
}
}));

你可能感兴趣的:(正则表达式,javascript,RegExp)