一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace、split、substring、indexOf等函数,这些函数有时候需要多次叠加使用,但是用起来比较简单,语法和书写格式比较容易记住,所以使用率是相当高的。

今天在操作一段字符串时,需要揪出字符串里的一个数字,虽然用split、substring、indexOf这几个函数的结合使用能实现,但是如果用下正则表达式,则效果好很多,正则表达式的最大作用不就是匹配吗?于是尝试使用正则表达式来编写程序。

  • var s = '我正在使用卡卡网www.webkaka.com来测试网站速度';
  • var s = s.replace(/([\s\S]*)卡卡网([a-z.]*)([\s\S]*)/ig,'$2');
  • alert(s);

这样的结果可以得到网址“www.webkaka.com”。

但是当上述语句的“卡卡网”是一个变量时,replace()就出现了问题。

我开始这样写:

  • 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来测试网站速度。也就是没有把网址给取出来。

然后又试了很多方法,都不顶用。

看来这里用replace()是行不通了,最后解决的方式变得比较复杂,写法如下:

  • 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正则表达式基本语法及简单实例

1、 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]);
  • }

3、学习下  简单类   负向类  范围类  组合类

//简单类

  • 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中用正则表达式判断字符串是否数字

js正则表达式replace里有变量的解决方法用到RegExp类的更多相关文章

  1. ?js调用PHP里的变量,怎么弄?

    js调用PHP里的变量,怎么弄 网上给的例子都是js文件里一开始先给这个变量一个值,要是那样有啥意思啊,我要的就是可以变化的. hychyc_2008 | 浏览 2741 次  2013-04-18 ...

  2. jQuery之JSP加载JS文件不起作用的有效解决方法

    JSP加载JS文件不起作用的有效解决方法 作者: 字体:[增加 减小] 类型:转载 时间:2014-04-08 jsp导入jquery文件,老是不起作用,原因在于其不能访问/WEB-INF/目录下的文 ...

  3. js报Uncaught SyntaxError: Unexpected token <错误 解决方法

    js报Uncaught SyntaxError: Unexpected token <错误 解决方法 错因 js被shiro的拦截器拦下,访问不了 #shiro的配置 shiro: hash-a ...

  4. js 未结束的字符串常量错误解决方法

    1.JAVASCRIPT引用时,使用的字符语言不一致. 比如:<script type=”text/javascript” src=”xxx.js” charset=”UTF-8″>.xx ...

  5. Ubuntu里node命令无效解决方法

    在ubuntu里用sudo apt-get install nodejs安装Node.js后, 会发现terminals里运行node命令(比如node –-version)时候会有No such f ...

  6. vue.js常见的报错信息及其解决方法的记录

    1.Vue packages version mismatch 翻译:vue包版本匹配错误 报错样例: 报错原因:通常出现于一些依赖库的更新或者安装新的依赖库之后(可以认为npm update已经成为 ...

  7. JS获取URL中文参数乱码的解决方法

    浏览器URL参数值中带有汉字字符,在接收时直接获取会出现乱码,下面是解决方法(传递前不需要encodeURI): function getUrlVars() { var vars = [], hash ...

  8. [转载]js正则表达式/replace替换变量方法

    原文地址:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html JavaScript正则实战(会根据最近写的不断更新) 1.j ...

  9. js正则表达式/replace替换变量方法

    转自:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html 1. javascript 正则对象替换创建和用法:/patter ...

随机推荐

  1. 简谈ashx

    是一般处理程序, 是asp.net web 组件的一种,ashx是其扩展名. 实现IHttpHandler接口,接收并处理http请求.这个接口有一个IsReusable成员,一个待实现的方法Proc ...

  2. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  3. (转)A Survival Guide to a PhD

    Andrej Karpathy blog About Hacker's guide to Neural Networks A Survival Guide to a PhD Sep 7, 2016 T ...

  4. [转]PHP如何关闭notice级别的错误提示

    1.在php.ini文件中改动error_reporting改为: error_reporting=E_ALL & ~E_NOTICE 2.如果你不能操作php.ini文件,你可以使用如下方法 ...

  5. Mysql与Oracle区别

    1.Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2.Oracle支持大并发,大访问量 ...

  6. acm之poj题库1001方法

    题目所言是银行等不能用四舍五入等影响精度的方法来计算的情况,是为提出背景.因此需要特殊的编写.这里使用了好几种方法才找到一个合适的方法.因为C++或者C缺乏类库,又跟底层关联太大,缺乏常用的类库,在写 ...

  7. double精度问题

    一个Double值由2个Double相加,比如明明是91.2 + 2.4,结果应为93.6,为什么结果是93.6000000000001 为什么会无端地在小数点后面加很多个0,最后还是一个1 ? 计算 ...

  8. springmvc登陆拦截案例

    一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  9. Jackson的使用

    Jackson框架是基于Java平台的一套数据处理工具,被称为"最好的JavaJson解析器". Jackson框架包含了3个核心库:streaming,databind,anno ...

  10. 解决Dropbox无法连接的问题

    同步共享服务Dropbox从6月18日开始再次遭到封锁,原因是DNS污染.Dropbox上次在2010年5月曾遭到IP封锁和网址关键字过 滤,2012年5月除文件外链功能外其它功能可正常访问:2014 ...