2011-11-05 7 views
9

Ho due stringhe. Stringa A: "La volpe marrone veloce" Stringa B: "La volpe marrone veloce salta sul cane pigro".Javascript confrontare stringhe e ottenere differenza di fine

La stringa B conterrà sempre la stringa A letteralmente. Non ci sarà mai una "volpe nera veloce" o una "volpe marrone veloce e veloce".

Come si ottiene una "stringa C" della differenza "salta sul cane pigro"?

+1

Compiti? Ad ogni modo, un modo semplice è iniziare con una variabile di lunghezza (chiamiamola 'l' o qualcosa) ed eseguire un ciclo che veda se' strA.substring (0, l) == strB.substring (0, l) 'fino a doesnt. Quindi, restituisci 'strB.substring (l);'. – Alxandr

+1

Si prega di postare ciò che hai provato finora. –

+10

'differenceString = string2.replace (string1," ");' o_o? –

risposta

6

È necessario controllare ogni parola con l'altra.

var s1 = "The quick brown fox", 
    s2 = "The quick brown fox jumped over the fence", 
    string1 = new Array(), 
    string2 = new Array(), 
    diff = new Array(), 
    longString; 

string1 = s1.split(" "); 
string2 = s2.split(" "); 

if(s1.length > s2.length) 
{ 
    longString = string1; 
} 
else 
{ 
    longString = string2; 
} 

for(x = 0; x < longString.length; x++) 
{ 
    if(string1[x] != string2[x]) 
    { 
     diff.push(string2[x]); 
    } 
} 

document.write("The difference in the strings is " + diff.join(" ")); 
+2

"la stringa B conterrà sempre una stringa A letteralmente" significa "non controllare parola per parola" – Triptych

+0

Sarà sempre un'estensione, o la stringa A potrebbe essere ovunque nella stringa B. – comu

+0

Hai erroneamente interpretato la domanda. Nella tua risposta s1 e s2 sarebbero errati perché s2 non contiene s1. –

9

Vedere l'esempio di base di seguito.
Questo può essere facilmente modificato/esteso per un comportamento diverso. risposta

var string_a = document.getElementById('string_a').innerHTML, 
 
    string_b = document.getElementById('string_b').innerHTML, 
 
    first_occurance = string_b.indexOf(string_a); 
 

 
if(first_occurance == -1) 
 
{ 
 
    alert('Search string Not found'); 
 
} 
 
else 
 
{ 
 
    string_a_length = string_a.length; 
 

 
    if(first_occurance == 0) 
 
    { 
 
    new_string = string_b.substring(string_a_length); 
 
    } 
 
    else 
 
    { 
 
    new_string = string_b.substring(0, first_occurance); 
 
    new_string += string_b.substring(first_occurance + string_a_length); 
 
    } 
 
    
 
    document.getElementById('diff').innerHTML = new_string; 
 
}
<p>String A: <span id="string_a">The quick brown fox</span></p> 
 
<p>String B: <span id="string_b">The quick brown fox jumps over the lazy dog</span></p> 
 
<hr/> 
 
<p>Difference: <span id="diff"></span></p>

+1

Ero un tutor di informatica (o, negli Stati Uniti, un 'TA'). Questa sarebbe l'unica risposta a cui darei il massimo dei voti. Dovrebbe essere la risposta accettata. –

+0

@MichaelScheper Sono d'accordo, questa dovrebbe essere la risposta accettata, ho formattato per una migliore leggibilità e trasformato in snippet di codice eseguibile – doz87

+1

Bello, @ doz87! Suggerimenti per ulteriori miglioramenti: utilizzare l'operatore di identità anziché l'operatore di uguaglianza http://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons e i nomi delle variabili di camelCase anziché ones with_underscores http://www.w3schools.com/js/js_conventions.asp Ma nessuno di questi problemi influisce sulla correttezza e sull'utilità di questa risposta. –

7

di comu in funzione ...

function compareString(s1, s2, splitChar){ 
    if (typeof splitChar == "undefined"){ 
     splitChar = " "; 
    } 
    var string1 = new Array(); 
    var string2 = new Array(); 

    string1 = s1.split(splitChar); 
    string2 = s2.split(splitChar); 
    var diff = new Array(); 

    if(s1.length>s2.length){ 
     var long = string1; 
    } 
    else { 
     var long = string2; 
    } 
    for(x=0;x<long.length;x++){ 
     if(string1[x]!=string2[x]){ 
      diff.push(string2[x]); 
     } 
    } 

    return diff;  
} 
compareString("?Yo=dude", "?Yo=Dude&do=roby", "&").join('\n'); 
compareString("?Yo=Dude", "?Yo=Dude&do=roby", "&").join('\n'); 

Nota: questa risposta risolve il problema di trovare più parametri di query (sulla base di un'altra stringa di query), e non è una risposta esatta per l'OP.

+1

Questa è una soluzione piuttosto ingegnerizzata !! ~ La soluzione di Ghost-Man è almeno di un ordine di grandezza più efficiente! http: // StackOverflow.com/a/8024608/1450294 –

+2

Questo è un commento corretto @ Michael non ho risposto alla domanda originale, ma ho pubblicato una soluzione al problema che avevo in quel momento. Penso di averlo fatto perché questo era il problema che stavo cercando di risolvere ed è stata la risposta di comu ad aiutarmi, quindi ho postato il codice che ho usato. Aggiornerò la mia risposta per riflettere che non risponde esattamente alla domanda. – chim

+2

La risposta dell'uomo fantasma dovrebbe essere la risposta accettata. – chim

1

Dai un'occhiata a questo sito per una meravigliosa API per vedere la differenza tra le stringhe: google-diff-match-patch Potrebbe essere necessario controllare l'interfaccia utente in base alle proprie necessità.

Problemi correlati