js正则表达式replace里有变量的解决方法用到RegExp类

一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用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中用正则表达式判断字符串是否数字

posted on 2016-11-25 07:52 布衣天使 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Roxlin/p/6100254.html

js正则表达式replace里有变量的解决方法用到RegExp类相关推荐

  1. 网页自动弹窗被拦截 html,JS弹出新窗口被拦截的解决方法

    在Web编程中,使用JS在新窗口打开页面的时候,会遇到被浏览器拦截的情况,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢? 一.问题一 一般情况下,如果直接在js中调用window.open()函 ...

  2. 开发chrome 插件, background.js中 console log 看不到解决方法

    开发chrome 插件, background.js中 console log 看不到解决方法 参考文章: (1)开发chrome 插件, background.js中 console log 看不到 ...

  3. Eclipse中出现JS文件前有红叉的解决方法

    Eclipse中出现JS文件前有红叉的解决方法 参考文章: (1)Eclipse中出现JS文件前有红叉的解决方法 (2)https://www.cnblogs.com/zhangda001/p/853 ...

  4. pycharm里鼠标右键失效解决方法

    pycharm里鼠标右键失效解决方法 具体情况如下,鼠标右键无法弹出以下选项框的. 解决方法如下,通过桌面快捷方式找到pycharm64原程序,然后通过原程序打开,或者删除桌面原快捷方式,通过pych ...

  5. vs code 不能正确补全结构体成员变量的解决方法

    vs code 在补全c语言代码时(keil工程文件)不能正确提示结构体成员变量. 解决方法: 在系统setting.json文件中找到C_Cpp.intelliSenseEngine配置删掉(或者将 ...

  6. 计算机磁盘管理看不到盘符,新装的固态硬盘系统里看不见?解决方法来了

    原标题:新装的固态硬盘系统里看不见?解决方法来了 怀着激动的心情将刚刚到手的固态硬盘装进电脑,结果开机后却找不到新装的硬盘?翻车怎会如此快?其实很多固态硬盘不识别.不认盘都是假故障.快速引导菜单不认盘 ...

  7. C# “Thread类Suspend()与Resume()已过时” 解决方法(利用ManualResetEvent类)

    C# "Thread类Suspend()与Resume()已过时" 解决方法(利用ManualResetEvent类) 参考文章: (1)C# "Thread类Suspe ...

  8. Nuxt.js项目不识别import原因及解决方法

    1.问题 使用npx create-nuxt-app创建Nuxt.js项目,项目默认使用require引入依赖,如下: 平时习惯使用import,改为import Koa from 'koa'会报Sy ...

  9. 这台计算机没有安装并配置网络适配器,win10设备管理器里没有网络适配器的解决方法 - 系统家园...

    我们在使用win10系统电脑的时候,有些情况下可能需要找到我们的网络适配器进行相关的设置,但是有的小伙伴在设备管理器中并没有找到.对于这种问题小编觉得可能是因为我们的网卡设备,没有安装正确的驱动程序造 ...

最新文章

  1. 美团外卖分布式系统架构设计
  2. vs编译protobuf 3.0.0
  3. codeforces 374A Inna and Pink Pony 解题报告
  4. 刷算法题总结的一些结论公式
  5. 微软官方上线了Python教程,7个章节就把Python说通了!
  6. 大数据量高并发的数据库优化(转)
  7. 递归方式-全排列生成算法
  8. char un 数组printf_c语言中能不能用printf函数直接输出数组?如printf(%d,a[3][3]);
  9. c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)
  10. 1936 问题 B: 打印极值点下标(C语言)
  11. 【java学习之路】(java SE篇)011.线程池
  12. [转载] Python Web开发最难懂的WSGI协议,到底包含哪些内容? WSGI服务器种类和性能对比
  13. 思科上海被裁员人均赔偿100万?官方回应:大裁员消息不实,中国业务发展不顺为真...
  14. 今天加入了OSChina,准备将我的BLOG搬到这里。
  15. 腾讯视频怎么获得html代码,如何获取腾讯视频等九大视频网站的视频分享代码...
  16. 悟彻菩提真妙理 断魔归本合元神
  17. 席卷全球的大数据发展趋势需要什么?
  18. svmtrain和svmpredict简介
  19. 前端面试系列-输入url后全过程页面渲染机制DOM生成过程
  20. iOS 关于音频开发

热门文章

  1. 一个HBase查询问题引发的思考,作为HBase使用者这个问题你知道答案吗?
  2. APIO2020游记
  3. SQL注入之——宽字节与二阶注入
  4. 为什么楼主知道“菩提本无树”,却还在喊着“人生之不如意十有八九”
  5. 服务器速度变慢是什么原因?
  6. Modbus 通讯协议
  7. 将普通图片转化为字符画(Python)
  8. CAD2020学习笔记2
  9. 指针--用指针变量作函数参数的实例(按值调用与模拟按引用调用)、函数指针及其应用
  10. 知乎和简书的夜间模式实现套路