Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 461|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    前天 12:49
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-4-25 09:46:57 | 显示全部楼层 |阅读模式

    一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用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);   //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);
    • }

     

    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);  // 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);  //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);   // 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);  // a b c 1 2 3
    • }

     

    您可能对以下文章也感兴趣

    asp.net正则表达式提取网页网址、标题、图片实例以及过滤所有HTML标签实例

    总结:asp.net分割字符串的几种方法

    java中用正则表达式判断字符串是否数字

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-8 04:10 , Processed in 0.062723 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表