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

 更新时间:2019-04-17 21:43:11   作者:佚名   我要评论(0)

首先提出一个问题:
如何取得一个给定的字符串substr在另一个字符串str中出现的次数?
字符串匹配,第一想到的就是正则表达式,但我们最常使用的字面量来创建

首先提出一个问题:

如何取得一个给定的字符串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 正则表达式与字符串查找方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • JS判断字符串是否为整数的方法--简单的正则判断
  • js正则表达式校验指定字符串的方法
  • JS中判断某个字符串是否包含另一个字符串的五种方法
  • js字符串倒序的实例代码

相关文章

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

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

    首先提出一个问题: 如何取得一个给定的字符串substr在另一个字符串str中出现的次数? 字符串匹配,第一想到的就是正则表达式,但我们最常使用的字面量来创建
    2019-04-17
  • JavaScript email邮箱/邮件地址的正则表达式及分析

    JavaScript email邮箱/邮件地址的正则表达式及分析

    简言 在做用户注册时,常会用到邮箱/邮件地址的正则表达式。本文列举了几种方案,大家可以根据自己的项目情况,选择最适合的方案。 方案1 (常用) 规则定义如
    2019-04-17
  • 浅谈php使用curl模拟多线程发送请求

    浅谈php使用curl模拟多线程发送请求

    每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求。php的curl多线程是通过不断
    2019-04-17
  • web下载文件和跳转的方法

    web下载文件和跳转的方法

    如果不通过JSP和servlet直接下载文件的话,可以通过web.xml文件来识别文件类型来进行下载。如果要通过servlet来下载的话,可以如下所示来进行下载: 但是这
    2019-04-17
  • ASP.NET Core WebApi中使用FluentValidation验证五分时时彩数据模型的方法

    ASP.NET Core WebApi中使用FluentValidation验证五分时时彩数据模型的方法

    介绍 验证用户输入是一个Web应用中的基本功能。对于生产系统,五分时时彩开发人员通常需要花费大量时间,编写大量的代码来完成这一功能。如果我们使用FluentValidation
    2019-04-17
  • Node.js + express基本用法教程

    Node.js + express基本用法教程

    本文实例讲述了Node.js + express基本用法。分享给大家供大家参考,具体如下: 这里来讲下 express 框架的使用,编译的环境是 VS Code ,这里我已经配饰了阿
    2019-04-17
  • 正则表达式re.sub替换不完整的问题及完整解决方案

    正则表达式re.sub替换不完整的问题及完整解决方案

    title: 正则表达式re.sub替换不完整的问题现象及其根本原因 toc: true comment: true date: 2018-08-27 21:48:22 tags: ["Python", "正则表达式"]
    2019-04-17
  • tomcat共享多个web应用会话的实现方法

    tomcat共享多个web应用会话的实现方法

    tomcat共享多个web应用会话的实现方法 问题 今天有位朋友问了个问题,大致是:tomcat下两个Java web,一个是商城,一个是直播,从商城登录后,再跳转到直播,
    2019-04-17
  • vue自定义指令用法经典实例小结

    vue自定义指令用法经典实例小结

    本文实例总结了vue自定义指令用法。分享给大家供大家参考,具体如下: 自定义指令: 一、属性: Vue.directive(指令名称,function(参数){ this.el -> 原生
    2019-04-17
  • C#中正则表达式与回车换行符问题

    C#中正则表达式与回车换行符问题

    C#中,读取文本文件内容,里面往往有许多回车换行符(“\r\n”),虽然一般不可见,但却实实在在的存在。这时候,使用正则表示式进行匹配,需要考虑其存在。今
    2019-04-17

最新评论