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 正则表达式与字符串查⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论