function findDiff(original, newText) { function getZip(originalList, newTextList){ return originalList.map(function(char,i) { return { first: char, second: newTextList[i] } }) } function findDiffPoint(zippedList) { var start = 0 zippedList.forEach(function(pair, index) { if (start > 0) return if (pair.first != pair.second) { start = index } }) return start } var zip = getZip( original.split(''), newText.split('') ) var diffStart = findDiffPoint(zip) var reverseZip = getZip( original.split('').reverse(), newText.split('').reverse() ) var diffEnd = newText.length - findDiffPoint(reverseZip) var added = newText.slice(diffStart,diffEnd) return { start: diffStart, end: diffEnd, added: added } } var original = "first para\n Second para" var newText = "first para\n INSERT Second para" diff = findDiff(original,newText) console.log( diff )