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中用正则表达式判断字符串是否数字
转载于:https://www.cnblogs.com/Roxlin/p/6100254.html
js正则表达式replace里有变量的解决方法用到RegExp类相关推荐
- 网页自动弹窗被拦截 html,JS弹出新窗口被拦截的解决方法
在Web编程中,使用JS在新窗口打开页面的时候,会遇到被浏览器拦截的情况,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢? 一.问题一 一般情况下,如果直接在js中调用window.open()函 ...
- 开发chrome 插件, background.js中 console log 看不到解决方法
开发chrome 插件, background.js中 console log 看不到解决方法 参考文章: (1)开发chrome 插件, background.js中 console log 看不到 ...
- Eclipse中出现JS文件前有红叉的解决方法
Eclipse中出现JS文件前有红叉的解决方法 参考文章: (1)Eclipse中出现JS文件前有红叉的解决方法 (2)https://www.cnblogs.com/zhangda001/p/853 ...
- pycharm里鼠标右键失效解决方法
pycharm里鼠标右键失效解决方法 具体情况如下,鼠标右键无法弹出以下选项框的. 解决方法如下,通过桌面快捷方式找到pycharm64原程序,然后通过原程序打开,或者删除桌面原快捷方式,通过pych ...
- vs code 不能正确补全结构体成员变量的解决方法
vs code 在补全c语言代码时(keil工程文件)不能正确提示结构体成员变量. 解决方法: 在系统setting.json文件中找到C_Cpp.intelliSenseEngine配置删掉(或者将 ...
- 计算机磁盘管理看不到盘符,新装的固态硬盘系统里看不见?解决方法来了
原标题:新装的固态硬盘系统里看不见?解决方法来了 怀着激动的心情将刚刚到手的固态硬盘装进电脑,结果开机后却找不到新装的硬盘?翻车怎会如此快?其实很多固态硬盘不识别.不认盘都是假故障.快速引导菜单不认盘 ...
- C# “Thread类Suspend()与Resume()已过时” 解决方法(利用ManualResetEvent类)
C# "Thread类Suspend()与Resume()已过时" 解决方法(利用ManualResetEvent类) 参考文章: (1)C# "Thread类Suspe ...
- Nuxt.js项目不识别import原因及解决方法
1.问题 使用npx create-nuxt-app创建Nuxt.js项目,项目默认使用require引入依赖,如下: 平时习惯使用import,改为import Koa from 'koa'会报Sy ...
- 这台计算机没有安装并配置网络适配器,win10设备管理器里没有网络适配器的解决方法 - 系统家园...
我们在使用win10系统电脑的时候,有些情况下可能需要找到我们的网络适配器进行相关的设置,但是有的小伙伴在设备管理器中并没有找到.对于这种问题小编觉得可能是因为我们的网卡设备,没有安装正确的驱动程序造 ...
最新文章
- php导出excel(xls或xlsx)(解决长数字显示问题)
- python使用matplotlib可视化线图(line plot)、为可视化图像添加双Y轴、分别可视化不同范围的数据(double y axis in matplotlib)
- Fiddler抓包使用教程-乱码处理 Decode
- 在并发中练习 Boost.Multiprecision多线程环境相关的测试程序
- DGL教程【三】构建自己的GNN模块
- vs code 添加jquery的智能提示
- 怎么调试EXC_BAD_ACCESS错误
- C和C++太难了。。搞这个方向进大厂它不香吗?
- php寻找文本,PHP文本数据库的搜索方法_php
- Rational AppScan 标准版可扩展性和二次开发能力简介
- 执行jar包中的某个类
- Java基础篇:嵌套 switch 语句
- 计算机网络telnet命令作用,telnet命令使用方法详解
- 用口诀背英语单词绿色版简介
- Ghrome浏览器安装IE TAB插件的方法
- pythonic希腊典故_希腊神话习语(整理)
- python直角三角形的两个直角边、求斜边_直角三角形斜边公式计算器 两个直角边边长的平方加起来等...
- 力扣刷题 DAY_77 贪心
- Lotus 新手运维手册
- 怎么恢复360删除的文件?360文件恢复,快速完成
热门文章
- apio2022 线上游记
- 使用C#对MySQL进行操作
- 美学生用ChatGPT写论文被识破,导师:好到不符合我对学生的预期
- 5个Dubbo面试题,含金量超高
- 罗马利亚夫妻网恋结婚 给儿子取名“雅虎”
- 读《计算机程序设计艺术》卷1:基本算法(第3版)
- 贴片电阻封装和功率的的关系
- 不是我穷,是他真的很好用!
- Houdini图文笔记:Your driver settings have been set to force 4x Antialiasing in OpenGL applications问题的解决
- 电子设计教程44:流水灯电路-应用74HC14施密特反相器