一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用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. Mac使用wireshark对移动设备抓包

    在系统偏好设置中,打开蓝牙共享网络,就能让移动设备通过连接蓝牙来访问网络,这个途径访问都会被wireshark所抓 然后捕获接口中可选 设置 筛选 为 http and (ip.src == 192. ...

  2. Ext.Net 学习随笔 003 Panel基本使用

    Panel() 1.使用Content和Html属性设置Panel内容 前台View代码 @(X.Panel() .ID("panel1") .Width() .Height() ...

  3. POJ 3311 Hie with the Pie (状压DP)

    dp[i][j][k] i代表此层用的状态序号 j上一层用的状态序号 k是层数&1(滚动数组) 标准流程 先预处理出所有合法数据存在status里 然后独立处理第一层 然后根据前一层的max推 ...

  4. HTML中的属性、段落、标题、换行等

    HTML的属性html标签的属性总是以名称/值(name=“value”)的方式出现:属性总是在html元素的开始标签中规定: 1.html链接由<a>标签定义,url在href中指定:& ...

  5. WebService 不依赖配置文件直接在构造函数配置地址

    研究了下 ClientBase(Binding binding, EndpointAddress remoteAddress) 这个重载更好用,都不用填名称比如 new PAS.WebService. ...

  6. ios 写项目的时候遇到的问题及解决方案(1)

    1.解决headerView不随cell一起滚动的问题 解决方案:myHeaderView为自己创建的view加在tableHeadView上, self.tableView.tableHeadVie ...

  7. IQueryable,IEnumerable,List相互转换

    发个文记录一下犯的错误吧!!! 如果在使用ASP.NET MVC很多的数据存取都是以IQueryable<>泛型类接收,那么在做两个IQueryable<>集合拼接时对于新手可 ...

  8. ashx文件不能使用DAL和Model的解决办法

    好久没有写web程序了,今天在写web程序时,发现一个问题,在ashx文件中,已经using了DAL和Model命名空间,而且引用中也引用了程序集,可是还报错:未能找到类型或命名空间"Mod ...

  9. [MongDB] 主从架构--官方极力不推荐

    一.缘由: 看着数据库大家庭都有主从模式,想着Mongodb应该也不会落下.但从官网看来,先是早先舍弃了Master-Master模式,现在又在不推荐 Master-Slave模式,这是要标新立异呀. ...

  10. 使用Grunt 插件打包Electron Windows应用

    最近利用Electron来创建跨桌面应用的趋势似乎很火.看了几个用Electron开发的应用,这些应用在windows下面的安装方式,都是类似一个绿色软件的安装方法,下载.zip->解压到相应目 ...