成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端實現文本對比,并高亮顯示差異!

開發 前端
文本對比可以借助 jsdiff 來實現,??jsdiff?? 是一個 JavaScript 庫,用于實現文本差異比較。這個庫提供了多種方法來計算和展示兩個文本之間的差異,可以用于多種文本差異比較的場景,比如版本控制、文檔比較、代碼編輯器中的變更高亮等。

你有沒有想過,常見的代碼差異對比是如何都實現的呢?其實這里面涉及到非常復雜的文本對比算法,本文就來看看如何通過現有工具庫 jsdiff + diff2html 實現文本對比,并高亮顯示差異!

圖片圖片

文本對比

文本對比可以借助 jsdiff 來實現,jsdiff 是一個 JavaScript 庫,用于實現文本差異比較。這個庫提供了多種方法來計算和展示兩個文本之間的差異,可以用于多種文本差異比較的場景,比如版本控制、文檔比較、代碼編輯器中的變更高亮等。

jsdiff 基于 Myers 在 1986 年提出的 "An O(ND) Difference Algorithm and its Variations" 算法實現。

jsdiff 是一個非常熱門的工具庫,其 npm 周下載量高達 4000 萬,很多知名前端工具庫都依賴它:

圖片圖片

Github:https://github.com/kpdecker/jsdiff

以下是 jsdiff 提供的 API:

  • diffChars - 對兩個文本進行字符級別的差異比較。
  • diffWords - 對兩個文本進行單詞級別的差異比較,忽略空白字符。
  • diffWordsWithSpace - 對兩個文本進行單詞級別的差異比較,考慮空白字符作為分隔符。
  • diffLines - 對兩個文本按行進行差異比較。
  • diffSentences - 對兩個文本按句子進行差異比較。
  • diffCss - 專門用于比較 CSS 代碼的差異。
  • diffJson - 比較兩個 JSON 對象的差異,首先將它們序列化為格式化的 JSON 文本,然后逐行比較。
  • diffArrays - 比較兩個數組,檢查數組元素的嚴格等同性。
  • createTwoFilesPatch - 創建一個包含兩個文件差異的補丁。
  • createPatch - 創建一個補丁,通常用于一個文件的前后變化。
  • applyPatch - 應用一個給定的補丁到源文本上。
  • applyPatches - 應用一個或多個補丁到相應的文件內容上。
  • parsePatch - 解析一個補丁字符串為結構化的數據。
  • reversePatch - 反轉一個補丁,使得應用此補丁會撤銷原始的更改。
  • convertChangesToXML - 將差異對象轉換為 XML 格式。
  • convertChangesToDMP - 將差異對象轉換為 Google 的 diff-match-patch 庫的格式。

在使用 jsdiff 時,首先需要通過以下命令來安裝:

npm install diff --save

安裝完成之后就可以選擇合適的 API 直接使用了。對于文章最開始的例子,就可以借助 createTwoFilesPatch API 來對比兩個文件的差異,它的參數如下:

createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)
  • oldFileName: 舊文件的文件名。
  • newFileName: 新文件的文件名。
  • oldStr: 原始字符串值
  • newStr: 新的字符串值
  • oldHeader: 可選,允許在舊文件的頭部添加額外的信息。
  • newHeader: 可選,用于在新文件的頭部添加額外的信息。
  • options: 一個包含選項的對象,可以用來自定義補丁的生成方式:

context: 描述應該包含多少行上下文。設置為 Number.MAX_SAFE_INTEGER 或 Infinity 可以包含整個文件內容在一個塊(hunk)中。

ignoreWhitespace: 與 diffLines 中的用法相同,用于忽略空白字符差異。默認為 false。

stripTrailingCr: 與 diffLines 中的用法相同,用于在執行差異比較之前去除所有尾隨的回車符(\r)。這有助于在比較 UNIX 和 Windows 文本文件時得到有用的差異結果。默認為 false。

代碼如下:

import * as Diff from 'diff';

const oldFile = `{
  "projectName": "ExampleProject",
  "version": "1.0.0",
  "author": "John Doe",
  "dependencies": {
    "libraryA": "^1.2.3",
    "libraryB": "^3.4.5"
  },
  "devDependencies": {
    "toolX": "^0.9.8"
  },
  "scripts": {
    "start": "node index.js"
  }
}`; 

const newFile = `{
  "projectName": "ExampleProject",
  "version": "1.0.1",
  "author": "Jane Doe",
  "dependencies": {
    "libraryA": "^1.2.3",
    "libraryC": "^7.8.9"
  },
  "devDependencies": {
    "toolX": "^0.9.8",
    "toolY": "^2.3.4"
  },
  "scripts": {
    "start": "node app.js",
    "test": "npm test"
  }
}`;

const diff = Diff.createTwoFilesPatch("舊文件", "新文件", oldFile, newFile);

這里的對比結果 diff 結果如下:

圖片圖片

對比結果有點丑,下面會進行優化。

除了 jsdiff,還有一個基于 jsdiff 開發的 React 庫:react-diff-viewer。它提供了一種簡單易用的方式來展示兩個文本或對象之間的差異,不僅可以對文本進行對比,還可以輸出漂亮的差異對比結果。

圖片圖片

Github:https://github.com/praneshr/react-diff-viewer

高亮顯示差異

如果使用 jsdiff 進行對比,對比結果可能沒那么美觀,可以借助 diff2html 來美化。

diff2html 是一個用于將差異(diff)結果轉換成 HTML 格式的工具,它通常用于在網頁上展示文件或文本內容之間的差異。這個庫提供了一種方便的方式來生成美觀的差異比較視圖,使得用戶可以輕松地查看和理解兩個版本之間的變化。

Github:https://github.com/rtfpessoa/diff2html

首先需要進行安裝:

npm install diff2html --save

然后導入使用即可:

import * as Diff2Html from "diff2html";

const outputHtml = Diff2Html.html(diff, {
  inputFormat: "diff",
  showFiles: true,
  matching: "lines",
  highlight: true,
  outputFormat: "side-by-side",
});

這里的 diff 就是上一步中生成的 diff 結果。

美化后對比如下,更美觀了:

圖片圖片

更多配置可以在其文檔中進行探索。

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2009-12-28 11:14:29

WPF顯示文本

2018-03-30 12:40:10

潤乾差異數據

2009-09-11 11:58:00

C# ListBox多

2010-02-23 17:42:29

Ubuntu vim

2019-07-10 10:00:42

PHPPython語法

2021-09-15 08:45:55

Python文本文件代碼

2012-03-07 11:41:25

明基投影機

2023-12-20 22:04:17

Linux二進制文件

2010-08-05 14:36:47

WorkFlow

2020-10-15 11:22:34

PyTorchTensorFlow機器學習

2009-06-09 21:59:13

語法高亮Javascript

2017-04-07 11:45:25

CSSDIV前端

2019-07-17 13:41:36

VueReactJSX

2022-12-02 07:24:46

2017-07-14 14:50:00

架構框架前端

2017-06-27 14:02:09

前端框架Bootstrap

2012-12-25 13:54:28

AndroidTextview

2009-07-27 10:35:24

高亮Javascrip

2018-08-15 12:43:52

iOSAndroid設計差異

2022-06-19 14:38:55

Python
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日产久久| 日本中文字幕日韩精品免费 | 日本一级淫片免费啪啪3 | 亚洲欧美成人在线 | 男女久久久 | 国产精品成人一区二区三区 | 我要看黄色录像一级片 | 在线成人免费视频 | 中文字幕高清视频 | 国产高清一区二区三区 | 欧美xxxx色视频在线观看免费 | 免费看片国产 | 国产精品99久久久久久人 | 亚洲精品久久久久久国产精华液 | 精品国产乱码久久久久久闺蜜 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 日日骚网 | 久久久青草婷婷精品综合日韩 | 色吊丝2288sds中文字幕 | 国产精品九九九 | 热99精品视频 | 中文字幕免费在线 | 国产91精品网站 | 欧美一区二区在线观看 | 成人激情视频免费在线观看 | 国产91成人 | 91精品久久久久久久久中文字幕 | 日本中文字幕视频 | 国产精品久久久亚洲 | 中文字幕不卡一区 | 四虎影视免费观看 | 91精品久久久久久久久久入口 | 99热.com| 激情六月丁香婷婷 | 国产乱码精品一区二区三区忘忧草 | 国产二区av| 欧美涩| 91精品中文字幕一区二区三区 | 午夜久久久 | 日韩欧美一级 | 精品成人免费视频 |