在Javascript中计算正则expression式的匹配数
我想写一个正则expression式来计算大块文本中空格/制表符/换行符的数量。 所以我天真地写了下面:
numSpaces : function(text) { return text.match(/\s/).length; }
由于某些未知的原因,它总是返回1
。 上述说法有什么问题? 我已经解决了以下问题:
numSpaces : function(text) { return (text.split(/\s/).length -1); }
您的初始代码的问题是您缺less全局标识符 :
>>> 'hi there how are you'.match(/\s/g).length; 4
如果没有正则expression式的g
部分,它只会匹配第一个匹配项并在那里停止。
另外请注意,你的正则expression式会连续两次计算空格:
>>> 'hi there'.match(/\s/g).length; 2
如果这是不可取的,你可以这样做:
>>> 'hi there'.match(/\s+/g).length; 1
正如我在前面的回答中所提到的,您可以使用RegExp.exec()
遍历所有匹配项并计算每个匹配项; 它的优点仅限于内存,因为总体上比使用String.match()
要慢20%左右。
var re = /\s/g, count = 0; while (re.exec(text) !== null) { ++count; } return count;