博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解析JavaScript 正则表达式与字符串查找
阅读量:6256 次
发布时间:2019-06-22

本文共 1174 字,大约阅读时间需要 3 分钟。

今天小编就为大家分享一篇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需要进一步把普通字符串中的变成正则表达式中的,像是更深一则转化的意思,称为双重转义,这样\以后的意思是正则表达式中的转义符()。

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

结语

感谢您的观看,如有不足之处,欢迎批评指正。

转载地址:http://vlnsa.baihongyu.com/

你可能感兴趣的文章
[CF949C]Data Center Maintenance
查看>>
增强for循环的使用详解及代码
查看>>
程序员优化程序流程
查看>>
6 ZigZag Conversion
查看>>
[react-router] 平时积累
查看>>
强类型数据集
查看>>
使用python处理selenium中的获取文本问题
查看>>
LinearLayout布局
查看>>
java 的 (PO,VO,TO,BO,DAO,POJO) 解释
查看>>
基本计数方法
查看>>
Mock.js:前后端分离开发工具
查看>>
内容循环滚动的表格
查看>>
Catalyst揭秘 Day7 SQL转为RDD的具体实现
查看>>
【转载】小公司如何管理
查看>>
DOM笔记(十):JavaScript正则表达式
查看>>
关于贴友的一个书本页面简单布局(html+css)的实现
查看>>
input 内容发生改变时触发事件
查看>>
IOS之表视图单元格删除、移动及插入
查看>>
转载翻译简介:关于Flash and C++ Native Extension C++扩展ANE——2
查看>>
【Android】10.4 卡片视图
查看>>