Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式来匹配单词并计算每个单词出现的次数_Javascript_Regex - Fatal编程技术网

Javascript正则表达式来匹配单词并计算每个单词出现的次数

Javascript正则表达式来匹配单词并计算每个单词出现的次数,javascript,regex,Javascript,Regex,我有一个正则表达式来检查文件中的许多单词 /((word1?)|(word2?)|(word3?)|(word4?)|(word5 ?)|(word6?)|(word7?))/gmi 是否有一种方法可以计算同一行代码中每个单词的匹配数 也就是说,当代码被执行时,我希望每个单词都被计数。 (示例:word1:10个匹配项,Word2,11个匹配项…您可以使用 var string='word1 word3 word1 word2 word4 word5 word1 word1 word3 wo

我有一个正则表达式来检查文件中的许多单词

/((word1?)|(word2?)|(word3?)|(word4?)|(word5 ?)|(word6?)|(word7?))/gmi
是否有一种方法可以计算同一行代码中每个单词的匹配数

也就是说,当代码被执行时,我希望每个单词都被计数。
(示例:word1:10个匹配项,Word2,11个匹配项…

您可以使用

var string='word1 word3 word1 word2 word4 word5 word1 word1 word3 word2';
变量计数={};
string.replace(/\bword\d+\b/gmi,函数($i){
计数[$i]=计数[$i]?计数[$i]+1:1;
});

console.log(count)
您可以使用
String.prototype.replace()
函数。它不会是一行代码,但会非常简单:

var regex = /((word1?)|(word2?)|(word3?)|(word4?)|(word5 ?)|(word6?)|(word7?))/gmi;

var counts = {};
var sourceText = yourSourceTextWithWordsInIt;

sourceText.replace(regex, function(_, matched) {
  matched = matched.toLowerCase();
  counts[matched] = (counts[matched] || 1) + 1;
});

然后,
counts
对象将准确地包含您所描述的内容。字符串原型上的
.replace()
函数可以将函数作为其第二个参数。当模式具有“g”标志时,将重复调用此函数。对函数的每次调用将包括整个匹配的子字符串作为第一个参数,随后的参数将是正则表达式中带括号的组匹配。

可能重复检查@AshokVishwakarma no,这确实是一个不同的问题。这个问题是关于计算特定单词的出现率。检查:)那些没有前缀的单词呢?我认为通过“word1”、“word2”等,OP只是在使用示例;我怀疑真正的搜索应该是搜索“香蕉”、“苹果”、“橘子”、“葡萄柚”等。