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

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

今天小编就为大家分享一篇JavaScript 正则表达式与字符串查找方法£¬具有很好的参考价值£¬希望对大家有所帮助¡£一起跟随小编过来看看吧

首先提出一个问题£º

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

字符串匹配£¬第一想到的就是正则表达式£¬但我们最常使用的字面量来创建的正则表达式方式?#27425;?#27861;传入变量£¬

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

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

其中第一个参数表示要匹配的字符串模式£¬因此可?#28304;?#20837;变量£¬不需要加/ /£¬第二个参数是可选的标志字符串¡£

可?#28304;?#20837;变量了£¬再介绍个字符串基本包装类型的方法£º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

另外£¬对于变量的问题£¬不使用构造函数也可以解决£¬?#35789;?#29992;eval()£º

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

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

但还是有个问题£¬如果子字符串中含有正则表达式中所谓的元字符£¨即+*£¿^等£©£¬则无法正常匹配¡£

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

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

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

相关文章

  • 最严谨的校验email地址的正则表达式及各种语言对应版

    最严谨的校验email地址的正则表达式及各种语言对应版

    这篇文章主要介绍了最严谨的校验email地址的正则表达式及各种语言对应版,本文给出通用¡¢Python¡¢Javascript¡¢PHP¡¢Perl / Ruby¡¢Perl等版本的最严谨的表达式写法,需要的朋友可以参考下
    2015-07-07
  • 用JavaScrip正则表达式验证form表单的方法

    用JavaScrip正则表达式验证form表单的方法

    这篇文章主要介绍了用JavaScrip正则表达式验证form表单的方法,需要的朋友可以参考下
    2017-05-05
  • python 正则表达式 反?#22791;?/)的麻烦和陷阱

    python 正则表达式 反?#22791;?/)的麻烦和陷阱

    这里是一点小心得¡£ 由于正则表达式使用反?#22791;?#26469;转义特殊字符£¬而python自身处理字符串时£¬反?#22791;?#20063;是用于转义字符£¬这样就产生了一个双重转换的问题
    2009-08-08
  • 用js实现过滤script的正则

    用js实现过滤script的正则

    今日研究discuz的代码£¬发现个不错的正则代码£¬基本上简单
    2008-05-05
  • vbs:能算出一个字符在一字段里共出现有几次的函数

    vbs:能算出一个字符在一字段里共出现有几次的函数

    vbs:能算出一个字符在一字段里共出现有几次的函数...
    2007-04-04
  • 过滤所有HTML代码和CSS,JS

    过滤所有HTML代码和CSS,JS

    过滤所有HTML代码和CSS,JS...
    2006-08-08
  • js mac地址 正则表达式

    js mac地址 正则表达式

    用正则实现的可以匹配mac地址的函数¡£
    2009-03-03
  • 最新评论

    常用在线小工具

    ÁÉÄþ35Ñ¡7¿ª½±½á¹û