我想写一个正则表达式来计算一段文本中空格/制表符/换行符的数量。所以我天真地写了以下内容:-
numSpaces : function(text) {
return text.match(/\s/).length;
}
由于某些未知原因,它总是返回 1
。上面的说法有什么问题?我已经解决了以下问题:-
numSpaces : function(text) {
return (text.split(/\s/).length -1);
}
最佳答案
tl;dr:通用模式计数器
// THIS IS WHAT YOU NEED
const 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'`)
原始答案
您的初始代码的问题是您缺少 global identifier :
>>> '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
关于javascript - 计算 Javascript 中正则表达式的匹配次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1072765/