javascript - 计算 Javascript 中正则表达式的匹配次数

标签 javascript regex

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

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/

相关文章:

javascript - 在 While 循环或类似循环中运行 GET 请求

正则表达式匹配动态名称一次

javascript - 关闭 <ul> 每 8 <li>

javascript - “this”关键字如何工作?

javascript - 如何在控制台记录 Vuejs 数据时过滤掉 getter 和 setter?

Java正则表达式问题

regex - 非常复杂的正则表达式

javascript - 你如何在 jasmine 的 ajax 调用中监视回调?

c# - 使用正则表达式匹配两个特定单词之间的所有内容

大括号内的正则表达式(大括号)——gnu parallel/xargs/find