我有一个正则表达式来检查文件中的多个单词。
/((word1?)|(word2?)|(word3?)|(word4?)|(word5 ?)|(word6?)|(word7?))/gmi
有没有一种方法可以计算同一行f代码中每个单词的匹配数?
也就是说,当执行代码时,我希望每个单词都被计算在内。 (例如:word1:10匹配,单词2,11匹配......)
答案 0 :(得分:2)
您可以使用 replace()
var string = 'word1 word3 word1 word2 word4 word5 word1 word1 word3 word2';
var count = {};
string.replace(/\bword\d+\b/gmi, function($i) {
count[$i] = count[$i] ? count[$i] + 1 : 1;
});
console.log(count)

更新:如果您想要所有字数,请使用
var string = 'word1 word3 word1 word2 word4 word5 word1 word1 word3 word2';
var count = {};
string.replace(/\b\w+\b/gmi, function($i) {
count[$i] = count[$i] ? count[$i] + 1 : 1;
});
console.log(count)

或者,如果您只需要某个单词的字数,请使用
var string = 'word1 word3 word1 word2 word4 word5 word1 word1 word3 word2';
var count = {};
string.replace(/\b(word1|word2|word3|word4|word5|word6|word7)\b/gmi, function($i) {
count[$i] = count[$i] ? count[$i] + 1 : 1;
});
console.log(count)

答案 1 :(得分:1)
您可以使用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
对象将包含您描述的内容。 String原型上的.replace()
函数可以将函数作为其第二个参数。当模式具有" g"时,将重复调用这样的函数。旗。对函数的每次调用都将包括整个匹配子字符串的第一个参数,后续参数将是来自正则表达式的带括号的组匹配。