• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    JavaScript 正则表达式与字符串查找方法

    首先提出一个问题:

    如何取得一个给定的字符串substr在另一个字符串str中出现的次数?

    字符串匹配,第一想到的就是正则表达式,但我们最常使用的字面量来创建的正则表达式方式却无法传入变量,

    这时应该使用另一种创建正则表达式的方式:构造函数,如下

    var reg = new RegExp(substr, "g");

    其中第一个参数表示要匹配的字符串模式,因此可以传入变量,不需要加/ /,第二个参数是可选的标志字符串。

    可以传入变量了,再介绍个字符串基本包装类型的方法:match()

    语法为str.match(regExp),参数为一个正则表达式,若传的不是正则则会隐式转换,返回值为一个包含匹配结果的数组,如果没有匹配项,则返回null。

    另外,字符串的match方法与正则的exec()类似,返回匹配的详细信息;字符串的search方法与正则的test()类似,只是用来查看是否匹配。

    回到最初的问题,完整的程序如下:

    var str1 = "abctestctesqk1test23";
    var str2 = "test";
     
    function countSubstr(str, substr) {
      var reg = new RegExp(substr, "g");
      return str.match(reg) ? str.match(reg).length : 0;//若match返回不为null,则结果为true,输出match返回的数组(["test","test"])的长度
    }
    console.log(countSubstr(str1, str2));//输出2
    

    另外,对于变量的问题,不使用构造函数也可以解决,即使用eval():

    var reg = "/" + substr + "/g";
    reg = eval(reg);//不推荐!

    但都知道不推荐使用eval()方法,所以还是推荐使用构造函数方法。

    但还是有个问题,如果子字符串中含有正则表达式中所谓的元字符(即+*?^等),则无法正常匹配。

    因为此时正则表达式是在字符串里的,\是字符串中的转义符,也是正则表达式中的转义符。那么只加一个\的话,只能说明在字符串中转义,而js需要进一步把普通字符串中的\变成正则表达式中的\,像是更深一则转化的意思,称为双重转义,这样\\以后的意思是正则表达式中的转义符(\)。

    所以对于那些元字符如果不进行双重转义,则无法真正查找要找的那个字符。这个问题尚未解决,不过一般字符串查找也很少有这些特殊字符吧,可以先一用。

    以上这篇JavaScript 正则表达式与字符串查找方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • JavaScript中layim之整合右键菜单的示例代码
    • JS实现查找数组中对象的属性值是否存在示例
    • JS实现常见的查找、排序、去重算法示例
    • JS二分查找算法详解
    • javascript中layim之查找好友查找群组
    上一篇:js正则表达式 匹配两个特定字符间的内容示例
    下一篇:正则表达式re.sub替换不完整的问题及完整解决方案
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    JavaScript 正则表达式与字符串查找方法 JavaScript,正则,表达式,与,