Javascript сравнить строки и получить конечную разницу

У меня две строки. Строка A: "Быстрая коричневая лиса" Строка B: "Быстрая коричневая лиса прыгает через ленивую собаку".

Строка B всегда будет содержать строку A дословно. Никогда не будет "быстрой черной лисы" или "быстрой и быстрой коричневой лисицы".

Как получить "String C" разницы "перепрыгивает через ленивую собаку".?

Ответ 1

const A = "The quick brown fox"

const B = "The quick brown fox jumps over the lazy dog."

const diff = (diffMe, diffBy) => diffMe.split(diffBy).join('')

const C = diff(B, A)

console.log(C) // jumps over the lazy dog.

Ответ 2

Смотрите основной пример ниже. Это может быть легко изменено/расширено для различного поведения.

var stringA = document.getElementById('string_a').textContent,
    stringB = document.getElementById('string_b').textContent,
    firstOccurrence = stringB.indexOf(stringA);

if(firstOccurrence === -1)
{
  alert('Search string Not found');
}
else
{
  var stringALength = stringA.length;
  var newString;

  if(firstOccurrence === 0)
  {
    newString = stringB.substring(stringALength);
  }
  else
  {
    newString = stringB.substring(0, firstOccurrence);
    newString += stringB.substring(firstOccurrence + stringALength);
  }

  document.getElementById('diff').textContent = newString;
}
<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>

Ответ 3

comu ответ как функция...

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');

Примечание. Этот ответ решает проблему поиска дополнительных параметров запроса (на основе другой строки запроса) и не является точным ответом для OP.

Ответ 4

Вам нужно перекрестно проверить каждое слово на другое.

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(" "));

Ответ 5

Если "String B всегда будет содержать строку A дословно", будет ли недостаточно следующего?

var c = b.replace(a, "");

Ответ 6

Ознакомьтесь с этим сайтом для замечательного API, чтобы увидеть разницу между строками: google-diff-match-patch Возможно, вам потребуется проверить пользовательский интерфейс в соответствии с вашими потребностями.

Ответ 7

Я нашел простой способ.

Вот код:

var t1 = "The quick brown fox";
var t2 = "The quick brown fox jumps over the lazy dog.";
var indxFoundStart = t2.search(t1); //first index of the position of t1 found in t2 (not use but you can print for sure)
var indxFoundEnd = t1.length; //last index of t1 found in t2
var textCompareLen = t2.length; // length of the longer string

// You can add the condition to verify which text is shorter, which text is longer if you do not want to fixed in t1 and t2
document.write("difference string is: " + t2.substring(indxFoundEnd, textCompareLen));

Я пробовал с 2 примера, текст с пробелом и текст без пробела, и это работает нормально.

Абсолютно, я попробовал на вашем примере, и он тоже отлично работает.