您当前的位置: 首页 > 学无止境 > JS经典实例 网站首页JS经典实例
javascript学习笔记-正则表达式
发布时间:2018-04-05 17:45:40编辑:雪饮阅读()
创建正则
第一个参数是模式字符串
弹出值前后带两个反斜杠是正则表达式的字面量表示法
var box=new RegExp('Box');
alert(box);
创建正则(带模式匹配)
第二个参数可选,模式修饰符
弹出值前后带两个反斜杠并且在末尾反斜杠后还多出了gi,这里模式匹配符号不管是gi还是ig都将在输出时是gi
var box=new RegExp('Box','gi');
alert(box);
创建正则(字面量方式带修饰符)
var box=/Box/ig;
alert(box);
正则测试
由于大小写不一致返回false
var pattern=new RegExp('Box');
var str='box';
alert(pattern.test(str));
正则测试(不区分大小写)
var pattern=new RegExp('Box','i');
var str='box';
alert(pattern.test(str));
正则测试(一句话匹配)
alert(/Box/i.test('box'));
正则测试(exec)
返回的是数组,若有匹配到就返回数组的值,否则就返回null
var pattern=/Box/i;
var str='box';
alert(typeof pattern.exec(str));
alert(pattern.exec(str));
正则表达式方法match
match方法将匹配结果以数组形式存储,全局匹配可以将匹配模式中添加g参数,添加g参数后匹配结果数组中则不仅仅是一个元素了。
var pattern=/Box/i;
var str='This is a Box! That is a Box!';
var a=str.match(pattern);
alert(a[0]);
正则表达式方法search
search将匹配结果中的第一结果的索引位置返回,若匹配无结果则返回-1,这里是否开启全局匹配都无所谓了,因为search只返回结果集中的第一个结果的索引位置
var pattern=/Box/i;
var str='This is a Box! That is a Box!';
alert(str.search(pattern));
正则表达式方法replace
Replace方法返回通过正则替换后的字符串,若匹配模式开启了全局则字符串中所有被匹配到的字符都将被替换
var pattern=/Box/i;
var str='This is a Box! That is a Box!';
alert(str.replace(pattern,'xy'));
正则表达式方法split
split方法使用正则将字符串分隔为数组
var pattern=/ /i;
var str='This is a Box! That is a Box!';
alert(str.split(pattern));
正则静态属性(需要正则规则执行下test函数才可以获得)
正则静态属性input
Input属性将获得与当前正则模式进行匹配的字符串
var pattern=/(g)oogle/ig;
var str='This is a google';
pattern.test(str);
alert(RegExp.input);
alert(RegExp['$_']);
//只有带下划线的短名才可以这样访问
alert(RegExp.$_);
正则静态属性leftContext()
leftContext属性将获得正则在字符串中匹配的第一个结果的索引位置左面的所有子字符串
var pattern=/(g)oogle/ig;
var str='This is a google';
pattern.test(str);
alert(RegExp.leftContext);
正则静态属性rightContext
rightContext属性将获得正则在字符串中匹配的第一个结果的索引位置右面的所有子字符串
var pattern=/(g)oogle/ig;
var str='This is a google asa google';
pattern.test(str);
alert(RegExp.rightContext);
正则静态属性lastMatch
lastMatch属性将返回上一次表达式搜索过程中最后一个匹配的文本字符串
var pattern=/(\d)/ig;
var str='This is a google2 asa google3';
//第一次正则表达式搜索(同时为正则静态属性获取做了准备工作)
pattern.test(str);
//上一次正则 表达式搜索
pattern.test(str);
alert(RegExp.lastMatch);
alert(RegExp['$&']);
正则静态属性lastParen
lastParen属性获取最后一对圆括号内的匹配子串
var pattern=/(g)(oogle)/ig;
var str='This is a google2 asa google3';
pattern.test(str);
alert(RegExp.lastParen);
正则实例的属性
正则实例的global、ignoreCase、multiline、source属性
var pattern=/(g)oogle/igm;
var str='This is a google';
pattern.test(str);
//表示匹配模式g是否已经设置
alert("global:"+pattern.global);
//表示匹配模式i是否已经设置
alert("ignoreCase:"+pattern.ignoreCase);
//表示匹配模式m是否已经设置
alert("multiline:"+pattern.multiline);
//获取正则表达式的源字符串形式
alert("source:"+pattern.source);
正则实例的lastIndex属性
lastIndex代表下次匹配将从哪里字符位置开始,并且该属性还可以手动设置,但该属性只在全局匹配模式g下的时候才会有效果,非全局匹配模式下在获取下次匹配位置上有偏差。
var pattern=/(g)oogle/img;
var str='This is a google fdasf google';
pattern.test(str);
pattern.test(str);
alert(pattern.lastIndex);
pattern.lastIndex=100;
alert(pattern.lastIndex);
获取控制
元字符^在[]里,则将[]里的取反匹配,若不在[]里则表示以其后的元素开头
匹配边界
var pattern=/google\b/;
var str='google';
//如果到达边界则返回true
alert(pattern.test(str));
匹配分组(模)的获取
var pattern=/8(.*)8/;
var str='雪饮杜敏捷8google8';
alert(pattern.test(str));
//获取模的前提是正则至少被运行过一次
alert(RegExp.$1);
匹配分组替换
var pattern=/8(.*)8/;
var str='雪饮杜敏捷8google8';
document.write(str.replace(pattern,'<strong>=>LOVE</strong>'));
贪婪模式与惰性模式的匹配替换
//默认贪婪模式
var pattern=/[a-z]+/;
//惰性模式的正则只匹配到满足条件的一个结果就会停止匹配
var pattern2=/[a-z]+?/;
var str='abcdefj';
alert("贪婪模式:"+str.replace(pattern,'1'));
alert("惰性模式:"+str.replace(pattern2,'1'));
alert("惰性模式匹配结果:"+str.match(pattern2));
惰性模式与全局匹配的替换
//惰性模式+全局匹配,则每个符号正则的字符都被单独替换而不是整个匹配结果被替换
var pattern=/[a-z]+?/g;
var str='abcdefj';
alert("惰性模式:"+str.replace(pattern,'1'));
alert("惰性模式匹配结果:"+str.match(pattern));
贪婪与惰性最佳实例
var pattern=/8(.*)8/;
var pattern2=/8(.*?)8/g;
var str='8google8 8google8 8google8';
document.write("贪婪与惰性最佳实例:");
document.write("<br/>");
document.write("贪婪:"+str.replace(pattern,"<strong>$1</strong>"));
document.write("<br/>");
document.write("惰性:"+str.replace(pattern2,"<strong>$1</strong>"));
使用exec可返回匹配结果为数组,其实可以发现javascript中字符串本身也可以当作数组用。
普通匹配
var pattern=/^[a-z]+\s[0-9]{4}$/;
var str='google 2012';
var arr=pattern.exec(str);
alert(arr);
alert(typeof arr);
alert(arr[0]);
分租匹配
var pattern=/^([a-z]+)\s([0-9]{4})$/;
var str='google 2012';
var arr=pattern.exec(str);
//0下标返回整个匹配结果
alert(arr[0]);
//1下标返回第一个分组匹配结果
alert(arr[1]);
//2下标返回第二个分组匹配结果
alert(arr[2]);
捕获性与非捕获性
捕获性:所有分组都返回叫做捕获性
var pattern=/(\d+)([a-z])/;
var str='123abc';
var a=pattern.exec(str);
alert(a[0]);
alert(a[1]);
alert(a[2]);
非捕获性:在分组中使用?:可以阻止该分组返回,此为非捕获性
var pattern=/(\d+)(?:[a-z])/;
var str='123abc';
var a=pattern.exec(str);
alert(a[0]);
alert(a[1]);
alert(a[2]);
嵌套分组匹配
var pattern=/(a?(b?(c?)))/;
var str='abc';
var a=pattern.exec(str);
//返回整个结果
alert(a[0]);
//返回最外层分组匹配结果
alert(a[1]);
//返回次外层分组匹配结果
alert(a[2]);
//返回次次外层分组匹配结果
alert(a[3]);
前瞻性匹配
var pattern=/goo(?=gle)/;
var str='goobb';
var str2='google';
var a=pattern.exec(str);
//前面虽然匹配goo但是必须后面是gle才返回前面的匹配结果
var b=pattern.exec(str2);
alert(a);
alert(b);
多行匹配
//若正则中没有头限制^则无需添加m来进行多行匹配,直接就是多行匹配
var pattern=/^\d+/gm;
var str='1.baidu\n2.google\n3.bing';
alert(str.replace(pattern,'#'));
关键字词:javascript,正则