一直比较惧怕使用正则表达式,貌似很深奥很复杂的样子,因此在用js操做字符串的时候,我最多使用的是replace、split、substring、indexOf等函数,这些函数有时候须要屡次叠加使用,可是用起来比较简单,语法和书写格式比较容易记住,因此使用率是至关高的。javascript
今天在操做一段字符串时,须要揪出字符串里的一个数字,虽然用split、substring、indexOf这几个函数的结合使用能实现,可是若是用下正则表达式,则效果好不少,正则表达式的最大做用不就是匹配吗?因而尝试使用正则表达式来编写程序。html
- var s = '我正在使用卡卡网www.webkaka.com来测试网站速度';
- var s = s.replace(/([\s\S]*)卡卡网([a-z.]*)([\s\S]*)/ig,'$2');
- alert(s);
这样的结果能够获得网址“www.webkaka.com”。java
可是当上述语句的“卡卡网”是一个变量时,replace()就出现了问题。web
我开始这样写:正则表达式
- var s = '我正在使用卡卡网www.webkaka.com来测试网站速度';
- var words = '卡卡网';
- var s = s.replace(/([\s\S]*)'+words+'([a-z.]*)([\s\S]*)/ig,'$2');
- alert(s);
可是运行结果是:我正在使用卡卡网www.webkaka.com来测试网站速度。也就是没有把网址给取出来。swift
而后又试了不少方法,都不顶用。数组
看来这里用replace()是行不通了,最后解决的方式变得比较复杂,写法以下:asp.net
- var s = '我正在使用卡卡网www.webkaka.com来测试网站速度';
- var words = '卡卡网';
- var regExp=new RegExp("([\s\S]*)"+words+"([a-z.]*)([\s\S]*)","gmi");
- regExp.test(s);
- var url = RegExp.$2;
- alert(url);
运行结果是:www.webkaka.com函数
这里用到RegExp类,下面解释下上述语句的含义。学习
- var regExp=new RegExp(); //是定义一个正则表达式实例
[\s\S]* 能够匹配全部字符,包括换行符等不可见符号。
[a-z.]* 是匹配网址,固然,这个写法只能匹配包含小写字符的网址,扩充写法是[a-zA-Z0-9.~]*就能够包含大部分网址了。
gmi 是,g表示全局扫描,若是不加,那么只匹配第一个匹配到的。加了g选项后,每一次匹配后,就会往下匹配。当扫描不到匹配的字符时,则返回null。i表示不区分大小写。
regExp.test(s); //s是原字符串,用regExp的正则去匹配出想要的一段字符串。
RegExp.$2; //这个是取第2个匹配项,每个括号()是一个匹配项。
知识扩充
js正则表达式基本语法及简单实例
一、 javascript 正则对象建立 和用法
声明javascript 正则表达式
- var reCat = new RegExp("cat");
你也能够
- var reCat = /cat/; //Perl 风格 (推荐)
2 、学习最经常使用的 test exec match search replace split 6个方法
1) test 检查指定的字符串是否存在
- var data = "123123";
- var reCat = /123/gi;
- alert(reCat.test(data)); //true
//检查字符是否存在 g 继续往下走 i 不区分大小写
2) exec 返回查询值
- var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
- var reCat = /cat/i;
- alert(reCat.exec(data)); //Cat
3)match 获得查询数组
- var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
- var reCat = /cat/gi;
- var arrMactches = data.match(reCat)
- for (var i=0;i < arrMactches.length ; i++)
- {
- alert(arrMactches[i]); //Cat cat
- }
4) search 返回搜索位置 相似于indexof
- var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
- var reCat = /cat/gi;
- alert(data.search(reCat)); //23
5) replace 替换字符 利用正则替换
- var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
- var reCat = /cat/gi;
- alert(data.replace(reCat,"libinqq"));
6)split 利用正则分割数组
- var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
- var reCat = /\,/;
- var arrdata = data.split(reCat);
- for (var i = 0; i < arrdata.length; i++)
- {
- alert(arrdata[i]);
- }
三、学习下 简单类 负向类 范围类 组合类
//简单类
- var data = "1libinqq,2libinqq,3libinqq,4libinqq";
- var reCat = /[123]libinqq/gi;
- var arrdata = data.match(reCat);
- for (var i = 0; i < arrdata.length; i++)
- {
- alert(arrdata[i]); // 1libinqq 2libinqq 3libinqq
- }
//负向类
- var data = "alibinqq,1libinqq,2libinqq,3libinqq,4libinqq"; //\u0062cf
- var reCat = /[^a123]libinqq/gi;
- var arrdata = data.match(reCat);
- for (var i = 0; i < arrdata.length; i++)
- {
- alert(arrdata[i]); //4libinqq
- }
//范围类
- var data = "libinqq1,libinqq2,libinqq3,libinqq4,libinqq5"; //\u0062cf
- var reCat = /libinqq[2-3]/gi;
- var arrdata = data.match(reCat);
- for (var i = 0; i < arrdata.length; i++)
- {
- alert(arrdata[i]); // libinqq2 libinqq3
- }
//组合类
- var data = "a,b,c,w,1,2,3,5"; //\u0062cf
- var reCat = /[a-q1-4\n]/gi;
- var arrdata = data.match(reCat);
- for (var i = 0; i < arrdata.length; i++)
- {
- alert(arrdata[i]); // a b c 1 2 3
- }
您可能对如下文章也感兴趣
asp.net正则表达式提取网页网址、标题、图片实例以及过滤全部HTML标签实例
总结:asp.net分割字符串的几种方法
java中用正则表达式判断字符串是否数字