Я пытаюсь выяснить, какие символы пользователь изменил в строке. Я, к счастью, могу предположить, что есть только один, последующий блок изменений.Вычислить разницу строк как диапазон
Я даже не смог найти, где начинается измененная область:
var originalVal, val; //strings
//The ranges
var original = [0,0];
var new_rang = [0,0];
//Old length, new length
var ol = originalVal.length;
var nl = val.length;
//Find where the change begins (that should be the same for both arrays)
for(var i=0; ; i++) {
//If end of string was reached or the strings are different
if((i>=ol||i>=nl) || originalVal[i]!=val[i]) {
original[0] = new_rang[0] = i;
//Set these to i too, assuming there was no change
original[1] = new_rang[1] = i;
break;
}
}
Это полностью ломает, если есть ряд одинаковых символов и пользователь удаляет один в середине:
mmmmx
ммMMX
ттт х
Сценарий скажет, что изменение произошло на 4, где переместился x
. Но на самом деле даже не представляется возможным сказать , которыйm
был удален.
Я могу, однако, указать, где позиция курсора была в начале и где она находится в конце. Таким образом, это выглядит более перспективным, но до сих пор не знаю, что делать:
мм | MMX
мм| MMX
м | MMX
На этот раз я могу см., который m
был удален. Но я до сих пор не знаю, как объяснить это на компьютере.
Использование библиотеки, такие как https://code.google.com/p/google-diff-match-patch/wiki/API. Или http://ejohn.org/files/jsdiff.js. См. Также http://stackoverflow.com/questions/4595108/comparing-two-strings-or-objects-and-getting-the-difference-back/4595225#4595225. –
Могу я просто спросить, есть ли какая-то особая цель узнать, кто был удален? Если вы собираетесь отменить действие, не имеет значения, если 'm' был вставлен в конце' m ', пользователю он выглядит одинаково, правильно? Так почему же вам нужно это знать? – somethinghere
Я реализовал пользовательский скрипт для переполнения стека, который позволяет мне вставлять изображения по тексту. Этот пользовательский текст не блокирует ваше письмо - вы можете ввести его после вставки изображения и когда URL-адрес загружен, он будет заменен. В этом случае часто возникает вопрос об изменениях - или, по крайней мере, это то, что я помню. Кроме того, я пытался создать довольно общее решение, применимое к другим проектам. Вот сценарий: http://stackapps.com/questions/4999/stackpaste-paste-images-into-the-text-form-instantly –