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

 更新时间:2018年07月23日 10:02:54   作者:小船划向前端   我要评论

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

相关文章

  • linux 正则表达式深度解析

    linux 正则表达式深度解析

    大体来讲,正则表达式的文法分为3种标准:BRE、ERE 和 ARE。其中 BER 和 ERE 属于 POSIX 标准,ARE 则是由各家定义的扩展
    2013-11-11
  • bash 中用于grep的正则表达式

    bash 中用于grep的正则表达式

    正则表达式是一类用于匹配文本的表达方式,常用于grep命令中表达检索条件。接下来通过本文给大家介绍bash 中用于grep的正则表达式,需要的朋友参考下吧
    2017-03-03
  • PHP 正则表达式特殊字符 [:alnum:] [:alpha:] 等

    PHP 正则表达式特殊字符 [:alnum:] [:alpha:] 等

    正则表达式中有两个很重要的特殊字符就是"[ ]"。他们可以匹配"[]"之中出现过的字符,比如"/[az]/"可以匹配单个字符"a"或者"z";如果把上面的表达式改成这样"/[a-z]/",就可以匹配任何单个小写字母,比如"a"、"b"等等。
    2011-09-09
  • php password密码验证正则表达式(8位长度限制)

    php password密码验证正则表达式(8位长度限制)

    php password密码验证正则表达式(8位长度限制),需要的朋友可以参考下。
    2011-07-07
  • 正则表达式之回溯

    正则表达式之回溯

    我通常在匹配一个字符串或是一组数字的时候会用到正则表达式,但很少会了解它是如何真正开始工作的?它的工作原理是什么?其实正则表达式里面的猫腻还挺多水也挺深的,有时候还不太好理解。
    2010-04-04
  • 精确查找PHP WEBSHELL木马 修正版

    精确查找PHP WEBSHELL木马 修正版

    上篇提到了关于网上流传查找PHP webshell的python脚本中,不严谨的代码,并且给出了一个python的检测代码,同时,下文里也提到不能检测到反引号的命令执行的地方。今天,我想了下,现在把思路发出来。
    2011-04-04
  • Linux中基本正则表达式

    Linux中基本正则表达式

    这篇文章主要介绍了Linux中基本正则表达式的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • 正则表达式语句中的注释方法分享

    正则表达式语句中的注释方法分享

    有时候为了提高正则表达式的可读性,需要加入注释,实际中不建议使用,可以用文本说明即可
    2018-04-04
  • 关于IE的RegExp.exec的问题

    关于IE的RegExp.exec的问题

    问题:"A[B]C[D]E[F]G"将其分为两个数组,分别是 ACEG 和 [B][D][F].
    2010-03-03
  • 移除HTML标签的正则表达式

    移除HTML标签的正则表达式

    移除HTML标签的正则表达式,这里是asp版本,注意是看正则的写法,脚本之家以前也发布过类似的代码。
    2009-11-11

最新评论