简体   繁体   中英

Compare two string in js and find difference

how to compare two strings purely, and provide specific result such as highlight extra word, wrong word & skip word in 2nd string. for eg.

var x = "This is the first original string in javascript language." </br>
var y = "This is not the first org string in language."

diff =  wrong word ="org"<br>
        Extra word ="not"<br>
        skip word ="javascript"

//here is slice of my code but in some case my program fails

  var x = "here is some value of string";
  var y = "here is the some val string";
  var k=0; 
  var SkipWrd="";
 for(var i=0; i<y.length;i++){ 
    var sktmp="";
    var swtmp=0;
     for(var j=0; j<=2;j++) { 
         if(x[k]!="undefined"){ 
             if(y[i]==x[k+j]){  

                 SkipWrd+=sktmp;
                 skip+=swtmp;
                 H_wrd +=  typ_wrd[i]+" ";
                 org_para+= sktmp+x[k+j]+" ";

                 k+=j+1;
                 break;
             }
            else{
             sktmp+= "<mark>"+ x[k+j]+" "+ "</mark>";
             swtmp++; 
             if(j==2 && y[i]!=x[k+j]){
                 err++;
                 Err_Wrd+=y[i]+" ";
                 H_wrd += "<span id='H-Err'>" + typ_wrd[i] + "</span> ";
                 org_para+="<span id='O-Err'>" +x[k]+" "+ "</span> ";

                 k++;
             }
            }
        } 
     }
 }

I have used a word by word comparison approach rather than the character by character approach you used. The overall logic is similar. The below code will work for your example, but there are many more cases that might go wrong.

 var x = "This is the first original string in javascript language."; var y = "This is not the first org string in language."; x=x.split(' '); y=y.split(' '); var i=0,j=0; while (1) { if (!x[i] || !y[j]) break; if (x[i] == y[j]) { i++; j++; continue; } if (x[i] == y[j+1]) { console.log('Extra word : ', y[j]); i++; j+=2; continue; } if (x[i+1] == y[j]) { console.log('Skip word: ', x[i]); i+=2; j++; continue; } if (x[i+1] == y[j+1]) { console.log('Wrong word: ', y[j]); i++; j++; continue; } } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM