如何使用javascript进行字符串单词比较

时间:2013-08-28 05:56:17

标签: javascript diff

我正在使用两个文本区域。项目是关于在线打字测试。我用了两个文字区域。第一个textarea包含要在第二个textarea中键入的内容。为了计算网络打字速度,我需要一个javascript diff算法。

Javascript Diff Algorithm algo符合我的所有要求......使用此

jsdiff.js

用于区分两个字符串的javascript文件。和

JS Diff Demo

是一个使用相同javascript文件的演示......你应该看看这个演示。但是我怎么知道输入正确的单词呢?麻烦的是,提供的javascript文件没有使用任何注释,也没有提供任何文档。

2 个答案:

答案 0 :(得分:1)

我不确定你是否需要比我上面的评论更多的解释。我喜欢你的链接显示的差异突出显示,但如果你只是在计算差异,为什么这样的事情不起作用? http://jsfiddle.net/vSySu/

var arr1 = $('#text1').val().split(' ');
var arr2 = $('#text2').val().split(' '); // split on whatever string or regex you want.

var diffs = 0;
for (var i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i]) {
        diffs++;
    }
}

alert(diffs);

答案 1 :(得分:0)

您可以使用lenvenshtein algorithm的组合来查找准确性,并使用一些基本的字符串操作来计算不同的单词。这可以改进,但你明白了:

function wordAccuracy(str1, str2) {

  var len = str1.length,
      distance = levenshtein(str1, str2),
      words1 = str1.split(' '),
      words2 = str2.split(' ');

  return {

    accuracy: 100 - (0|(distance * 100) / len) +'%',

    fail: words1.filter(function(word, idx){
      return word != words2[idx];
    }).length
  }
}

// Example:

var str1 = 'Lorem ipsum dolor sit amet consectetur adipiscing elit';
var str2 = 'Lorme ipsmu dolor sit maet cnsectetur adipiscing elot';

console.log(wordAccuracy(str1, str2));
//^ {
//    accuracy: '86%'
//    fail: 5
//  }