猿问

计算JavaScript中正则表达式的匹配数

我想编写一个正则表达式来计算文本块中空格/制表符/换行符的数量。所以我天真地写了以下内容:


numSpaces : function(text) { 

    return text.match(/\s/).length; 

}

由于某些未知原因,它总是返回1。上面的陈述有什么问题?此后,我通过以下方法解决了该问题:


numSpaces : function(text) { 

    return (text.split(/\s/).length -1); 

}


月关宝盒
浏览 1129回答 3
3回答

幕布斯7119047

通用模式计数器// THIS IS WHAT YOU NEEDconst count = (str) => {  const re = /YOUR_PATTERN_HERE/g  return ((str || '').match(re) || []).length}对于那些来到这里的人来说,他们正在寻找一种通用的方法来计算字符串中正则表达式模式的出现次数,并且如果出现的次数为零,也不希望它失败,那么此代码就是您所需要的。这是一个示范:/* *  Example */const count = (str) => {  const re = /[a-z]{3}/g  return ((str || '').match(re) || []).length}const str1 = 'abc, def, ghi'const str2 = 'ABC, DEF, GHI'console.log(`'${str1}' has ${count(str1)} occurrences of pattern '/[a-z]{3}/g'`)console.log(`'${str2}' has ${count(str2)} occurrences of pattern '/[a-z]{3}/g'`)原始答案初始代码的问题是缺少全局标识符:>>> 'hi there how are you'.match(/\s/g).length;4没有g正则表达式的部分,它将仅匹配第一个匹配项并在此停止。还要注意,您的正则表达式将对连续的空格计数两次:>>> 'hi  there'.match(/\s/g).length;2如果不希望这样做,则可以执行以下操作:>>> 'hi  there'.match(/\s+/g).length;1

偶然的你

如我先前的回答中所述,您可以RegExp.exec()用来遍历所有匹配并计算每次匹配;优点仅限于内存,因为总体而言,它比使用慢约20%String.match()。var re = /\s/g,count = 0;while (re.exec(text) !== null) {    ++count;}return count;
随时随地看视频慕课网APP
我要回答