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标签实例
js正则表达式replace里有变量的解决方法用到RegExp类的更多相关文章
- ?js调用PHP里的变量,怎么弄?
js调用PHP里的变量,怎么弄 网上给的例子都是js文件里一开始先给这个变量一个值,要是那样有啥意思啊,我要的就是可以变化的. hychyc_2008 | 浏览 2741 次 2013-04-18 ...
- jQuery之JSP加载JS文件不起作用的有效解决方法
JSP加载JS文件不起作用的有效解决方法 作者: 字体:[增加 减小] 类型:转载 时间:2014-04-08 jsp导入jquery文件,老是不起作用,原因在于其不能访问/WEB-INF/目录下的文 ...
- js报Uncaught SyntaxError: Unexpected token <错误 解决方法
js报Uncaught SyntaxError: Unexpected token <错误 解决方法 错因 js被shiro的拦截器拦下,访问不了 #shiro的配置 shiro: hash-a ...
- js 未结束的字符串常量错误解决方法
1.JAVASCRIPT引用时,使用的字符语言不一致. 比如:<script type=”text/javascript” src=”xxx.js” charset=”UTF-8″>.xx ...
- Ubuntu里node命令无效解决方法
在ubuntu里用sudo apt-get install nodejs安装Node.js后, 会发现terminals里运行node命令(比如node –-version)时候会有No such f ...
- vue.js常见的报错信息及其解决方法的记录
1.Vue packages version mismatch 翻译:vue包版本匹配错误 报错样例: 报错原因:通常出现于一些依赖库的更新或者安装新的依赖库之后(可以认为npm update已经成为 ...
- JS获取URL中文参数乱码的解决方法
浏览器URL参数值中带有汉字字符,在接收时直接获取会出现乱码,下面是解决方法(传递前不需要encodeURI): function getUrlVars() { var vars = [], hash ...
- [转载]js正则表达式/replace替换变量方法
原文地址:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html JavaScript正则实战(会根据最近写的不断更新) 1.j ...
- js正则表达式/replace替换变量方法
转自:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html 1. javascript 正则对象替换创建和用法:/patter ...
随机推荐
- 关于url传参中文乱码问题
之前都一直很不了解中文编码得问题,之前在做项目中没碰到那么头痛的问题.所以一直没有了解中文乱码的问题. 问题描述: 地址: http://localhost:8080/sun-government/c ...
- C++ 中静态成员函数访问非静态成员变量的方法
最近在 VS2010 里开发出厂烧写工具,遇到一个问题: 我创建了一个线程,在这个线程里要访问非静态成员,而这个线程函数是静态的.最后找到的办法是用对象指针来做. sourcecode: #test. ...
- golang 文件操作
package main import ( "bytes" "fmt" "io" "os" ...
- vm centos 网络配置
安装Centos系统,查看网络配置. 输入命令:ifconfig 127.0.0.1 要开启网络 进入ifcfg-eth0文件. 输入命令:vi /etc/sysconfig/network-scri ...
- [转]PHP Session的一个警告
警告全文如下: PHP Warning: Unknown: Your script possibly relies on a session side-effect which existed unt ...
- eclipse简单使用
1.10个快捷键: 1. ctrl+shift+r:打开资源 Control-Shift-T: 打开类型(Open type) Control-Shift-F: CodeàJavaàPre ...
- Troubleshooting a node by using the netapp SP
Troubleshooting a node by using the SP When you encounter a problem with a node, you can use the SP ...
- 在Ubuntu14.04系统POWER8服务器上搭建Docker Registry服务
本文描述了如何在POWER8服务器上搭建一个本地化的Docker镜像仓库,主要涉及镜像制作,Docker Registry服务启动等.希望能够对在非X86服务器上搭建Docker仓库的同学提供参考. ...
- Hibernate5.2关联关系之双向一对多(三)
Hibernate之双向一对多(三) 一.简介 本篇博文接着上一章的内容接着开展,代码也是 ...
- 【学】jQuery的源码思路2——$符号是如何封装的
jQuery中的$符号功能很强大,原因在于对函数参数的个数以及种类的控制,还有对于面向对象思想的运用 function jQuery(args){ //接受参数,并对其判断 this.elements ...