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

所属分类: 网络编程 / 正则表达式 阅读数: 1473
收藏 0 赞 0 分享

首先提出一个问题:

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

更多精彩内容其他人还在看

正则表达式验证IPV4地址功能实例分析

这篇文章主要介绍了正则表达式验证IPV4地址功能,结合实例形式分析了IPV4地址验证的原理及具体实现技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

正则表达式教程之前后查找lookaround详解

这篇文章主要介绍了正则表达式教程之前后查找lookaround,结合具体问题分析了向前查找及向后查找功能的实现技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

正则匹配密码只能是数字和字母组合字符串功能【php与js实现】

这篇文章主要介绍了正则匹配密码只能是数字和字母组合字符串功能,涉及针对字符、数字等正则操作相关技巧,并给出了php与js实现示例,需要的朋友可以参考下
收藏 0 赞 0 分享

正则验证不能含有中文的实现方法【jQuery与java实现】

这篇文章主要介绍了正则验证不能含有中文的实现方法,结合jQuery与java两种实现方法分析了针对中文的正则验证操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

JS 密码强度校验的正则表达式(简单且好用)

最近在做一个通行证的项目,在项目中有这样的需求,注册模块中输入密码需要显示密码强度,今天小编给大家分享JS 密码强度校验的正则表达式,简单好用,需要的朋友参考下
收藏 0 赞 0 分享

iOS 正则表达式判断纯数字及匹配11位手机号码的方法

这篇文章主要介绍了iOS 正则表达式判断纯数字及匹配11位手机号码的方法,判断手机号码是否正确的方法很多,我是用正则表达式来完成匹配的,具体方法,大家参考下本文
收藏 0 赞 0 分享

正则表达式(简单易懂篇)

正则表达式是一种可以用于模式匹配和替换的强大工具。这篇文章主要介绍了正则表达式(简单易懂篇),需要的朋友参考下
收藏 0 赞 0 分享

正则表达式实现匹配连续数字的方法

我这两天刚刚学正则表达式。我觉的正则对连续的字符匹配很简单,但是对连续的一段数字匹配就不是很好。正好最近有朋友问了匹配连续数字的正则,就帮忙写了一下,算是当作温习一下吧。下面这篇文章就主要介绍了正则表达式实现匹配连续数字的方法。
收藏 0 赞 0 分享

正则表达式简介及在C++11中的简单使用教程

正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex、regexp、RE、regexps、regexes、regexen。接下来通过本文给大家介绍正则表达式简介及在C++11中的简单使用教程,一起通过本文学习吧
收藏 0 赞 0 分享

正则表达式实现最小匹配功能的方法

这篇文章主要介绍了正则表达式实现最小匹配功能的方法,结合具体实例形式分析了正则表达式最小匹配功能的原理与实现技巧,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多