如何在javascript中查找两个字符串中相似字符的数量

如何在javascript中查找两个字符串中相似字符的数量,javascript,php,Javascript,Php,我需要使用JS/PHP查找两个字符串之间相似字符的数量 范例 str1:Mack str2:米歇尔 相似字符:“M”“C” 相似字符计数:2我将执行以下操作: str1 = str1.toUpperCase(); str2 = str2.toUpperCase(); var counter = 0; var min = Math.min(str1.length, str2.length); for(var i = 0; i < min; i++) { if(str1.charAt(i

我需要使用JS/PHP查找两个字符串之间相似字符的数量

范例 str1:Mack str2:米歇尔

相似字符:“M”“C” 相似字符计数:2

我将执行以下操作:

str1 = str1.toUpperCase();
str2 = str2.toUpperCase();
var counter = 0;
var min = Math.min(str1.length, str2.length);
for(var i = 0; i < min; i++)
{
   if(str1.charAt(i) === star2.charAt(i))
      counter++;
}
alert("Result: "+counter);
str1=str1.toUpperCase();
str2=str2.toUpperCase();
var计数器=0;
var min=数学最小值(str1.length,str2.length);
对于(变量i=0;i
使用函数


根据您的精确性,以下是我的解决方案:

str1 = str1.toUpperCase();
str2 = str2.toUpperCase();
var counter = 0, find = -1;
for(var i = 0; i < str1.length; i++)
{
    find = str2.indexOf(str1.charAt(i));
    if(find > -1)
    {
      counter++;
      str2 = str2.substr(0, find) + str2.substr(find + 1);
    }
}
alert("Result: "+counter);
str1=str1.toUpperCase();
str2=str2.toUpperCase();
var计数器=0,find=-1;
对于(变量i=0;i-1)
{
计数器++;
str2=str2.substr(0,find)+str2.substr(find+1);
}
}
警报(“结果:+计数器);
它适用于您给我们提供的两个示例:

米歇尔和米歇尔=8
Sneha和naveen=3

我需要更多的示例来确保这一点,但使用正则表达式可能适合您:

function similar_text_regex(str1, str2){
    var regEx = new RegExp('['+str2+']', 'gi');
    var matchCnt = str1.match(regEx2).length;
    return matchCnt;
}

console.log(similar_text_regex('Michelle', 'Michellle')); // --> 8
console.log(similar_text_regex('Jason', 'Jane')); // --> 3
console.log(similar_text_regex("sneha","naveen")); // --> 3

你试过什么吗?我试过PHP,类似于_text(),但它并不准确。你需要更加努力,如果没有内置的功能,那么尝试构建你自己的东西,然后返回失败的代码,发布一个示例来重现问题并解释你试图解决的问题。找到了解决方法,感谢@SCAUPWEB:)太好了:)请注意我的回答是公认的解决方案。如果您想检测“C”,请使用小写。您在发布邮件时正在编辑它。我用toUpperCase:)那是不对的。。仅循环到较短字符串的末尾将忽略实际上很重要的字符。(即“zzzy”“yyy”不会发现“y”在两个字符串中。)实际上,我之前的评论是假设匹配的字符不必具有相同的索引。这取决于他真正想要什么。在他的例子中,他在完全相同的位置显示了两个字符(第一个和第三个),所以我认为他只想计算它们。如果他说他想测试每个角色,但不看位置,我将提供另一个脚本。(正如你刚才在我打字的时候所说的)这没有效果,有时他们不会给你准确的数字。如果你尝试斯内哈和纳文。回显“字符计数:”。类似文本(“sneha”、“naveen”);它应该是回声:3但它是回声2他说对于Michelle和Michelle来说它应该是返回的8.现在应该是固定的。。我只是想,如果从左到右和从右到左匹配会得到最好的结果。。
str1 = str1.toUpperCase();
str2 = str2.toUpperCase();
var counter = 0, find = -1;
for(var i = 0; i < str1.length; i++)
{
    find = str2.indexOf(str1.charAt(i));
    if(find > -1)
    {
      counter++;
      str2 = str2.substr(0, find) + str2.substr(find + 1);
    }
}
alert("Result: "+counter);
function similar_text_regex(str1, str2){
    var regEx = new RegExp('['+str2+']', 'gi');
    var matchCnt = str1.match(regEx2).length;
    return matchCnt;
}

console.log(similar_text_regex('Michelle', 'Michellle')); // --> 8
console.log(similar_text_regex('Jason', 'Jane')); // --> 3
console.log(similar_text_regex("sneha","naveen")); // --> 3