Skip to content

مقارنة النصوص واكتشاف الفروقات

قارن نصّين فورًا داخل متصفحك. عرض جنبًا إلى جنب مع إبراز الفروقات على مستوى الكلمة، وتصدير unified diff، وتجاهل حالة الأحرف والمسافات والأسطر الفارغة. خصوصية كاملة — نصّك لا يغادر جهازك.

بدون تتبّع يعمل في المتصفّح مجاني
كل المقارنة تعمل محليًّا في متصفحك. نصّك لا يغادر هذا الجهاز.
خيارات التجاهل
روجِعت للتكافؤ مع مخرجات diff -u وصحّة LCS داخل السطر وإمكانية الوصول (أدوار ARIA، إعلانات تغييرات قارئ الشاشة، التعامل مع RTL/LTR). — فريق أدوات النصوص في Go Tools · May 21, 2026

ما هي مقارنة النصوص؟

مقارنة النصوص هي مقارنة بنيوية بين مستندَين نصّيَّين تكتشف أصغر مجموعة من الإدراجات والحذوفات اللازمة لتحويل أحدهما إلى الآخر. تجعل المخرجات التغيير مرئيًّا: أخضر للأسطر المضافة، أحمر للمحذوفة، إمّا جنبًا إلى جنب أو بصيغة unified patch (صيغة ---/+++/@@ المستخدَمة في git و GitHub وأمر patch في Unix).

تحت الغطاء، كل فرق حديث هو خوارزمية «أطول سلسلة فرعية مشتركة» (LCS). ورقة Eugene Myers عام 1986 بتعقيد O((N+M)D) هي التحقيق الكفؤ القياسي؛ والبرمجة الديناميكية الكلاسيكية (المستخدَمة هنا، مع تقليم البادئة/الذيل المشترك) أبسط وتعمل بكفاءة مع المدخلات الويبية النموذجية. بعد محاذاة الأسطر، تُمرَّر أزواج الحذف+الإضافة المتجاورة عبر LCS ثانٍ على مستوى الرمز لإبراز الكلمات التي تغيّرت فعليًّا داخل السطر — ما يسمّيه المراجعون «فرق داخل السطر» أو «فرق على مستوى الكلمة».

لِمَ لا نقارن السلاسل حرفًا بحرف فقط؟ لأن التعديلات نادرًا ما تكون مسطّحة: إدراج سطر واحد في وسط ملف من 200 سطر يُزيح كل سطر تحته. عملية === ساذجة ستعتبر 199 سطرًا مختلفًا. تخبرك LCS بالحقيقة: سطر واحد مضاف، 199 سطرًا دون تغيير.

تشتغل هذه الأداة بالكامل في متصفحك. دون رفع، دون ملف مؤقّت، دون سجل. آمنة لشيفرة مملوكة، عقود ذات تعديلات حمراء، سجلّات خاصة، أو أي شيء لا ترغب في لصقه على خادم طرف ثالث. تحتاج إلى مقارنة JSON بدلًا من ذلك؟ استخدم JSON Diff البنيوية حتى يتوقّف ترتيب المفاتيح والمسافات عن كونها ضوضاء. تقارن إعدادَين بصيغة YAML أو CSV؟ حوّلهما أوّلًا بـ YAML to JSON أو JSON to CSV، ثم قارن بالأداة المناسبة للصيغة.

// Two strings that look 'mostly the same' but a naïve check disagrees
const a = 'hello world';
const b = 'hello, world!';

// Character equality
a === b; // false — but only 3 characters actually changed.

// LCS-style diff (this tool, at line + word granularity)
// → 1 line modified, inline highlight: 'hello[, ]world[!]'
// → unified patch:
//   --- original
//   +++ modified
//   @@ -1 +1 @@
//   -hello world
//   +hello, world!

الميزات الرئيسية

جنبًا إلى جنب + Unified

بدّل بين العرض البصري بعمودَين (للمراجعة البشرية) وصيغة unified diff القياسية (لـ git apply وأدوات مراجعة الكود وتقارير العلل).

إبراز داخل السطر على مستوى الكلمة

حين يُقرَن سطران كمعدَّلَين، تحمل الرموز المتغيّرة وحدها خلفية ملوّنة. تجد عينك التعديل فورًا بدل مسح 80 محرفًا.

تجاهل الحالة/المسافات/الأسطر الفارغة

أربعة مفاتيح مستقلّة: الحالة، كل المسافات، المسافات الزائدة فقط، الأسطر الفارغة. يكرّر سلوك git diff -i -w -b بضغطتَين.

تصدير unified diff

انسخ رقعة ---/+++/@@ نظيفة مع ثلاثة أسطر من السياق. تنزل مباشرة في تعليق PR أو تقرير علّة أو patch -p1.

تعمل بالكامل في المتصفح

المدخلات لا تغادر جهازك أبدًا. دون رفع، دون تتبّع للنص. تعمل دون اتصال بمجرد تحميل الصفحة. آمنة للشيفرة المملوكة وللنثر السرّي.

مدركة لـ Unicode و RTL

تقسم الرموز على حدود كلمات Unicode. تُقارَن النصوص العربية والعبرية و CJK بنظافة؛ ويُطبَّع كل من CRLF و LF و CR.

أمثلة

مراجعة كود — إعادة تسمية متغيّر واحد

function getUser(id) {
  const u = db.users.find(x => x.id === id);
  return u;
}
function getUser(userId) {
  const u = db.users.find(x => x.id === userId);
  return u;
}

يُبرز عرض «جنبًا إلى جنب» كل سطر يحتوي على إعادة التسمية، بينما يُعتم الفرق على مستوى الكلمة الرموز غير المتغيّرة ليرى المراجِع المعرّف الذي تغيّر بدقّة.

تعديل عقد — إضافة بند واحد

1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
3. Disputes are resolved in California courts.
1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
2a. Termination notice must be in writing.
3. Disputes are resolved in California courts.

بند واحد مُدرَج (السطر 2a) هو الفرق الوحيد. تظل أسطر السياق المحيطة نظيفة — مفيد لمراجعة عقود حمراء أو وثائق سياسات.

تحقيق في السجلات — توقيت طلب تغيّر

GET /api/users 200 14ms
POST /api/orders 201 88ms
GET /api/orders/42 200 21ms
GET /api/users 200 14ms
POST /api/orders 201 4200ms
GET /api/orders/42 500 21ms

يتغيّر سطران. يُظهر الإبراز داخل السطر انجراف الكمون من 88ms إلى 4200ms ورمز الحالة من 200 إلى 500. وضع نموذجي للجدول الزمني لحادثة إنتاج.

مسافات بيضاء زائدة — فعّل خيار «تجاهل المسافات الزائدة»

  margin: 0;  
  padding: 0;
  border: none;
  margin: 0;
  padding: 0;
  border: none;

بدون الخيار، يُعلَن عن فرق في السطر الأول (مسافات زائدة). فعّل «تجاهل المسافات/التبويبات الزائدة» ويصبح الفرق صفرًا — نفس الحيلة التي يقوم بها git diff -b.

كيفية الاستخدام

  1. 1

    ألصق النسختَين

    النص الأصلي على اليمين، المعدَّل على اليسار. يُعرض الفرق المباشر أثناء الكتابة؛ المدخلات الكبيرة (أكثر من 200 كيلوبايت إجمالًا) تتحوّل إلى زرّ «الفرق» اليدوي.

  2. 2

    فعِّل خيارات التجاهل التي تحتاجها

    تجاهل حالة الأحرف، تجاهل كل المسافات، تجاهل المسافات الزائدة، أو تجاهل الأسطر الفارغة — كل منها مستقلّ ومحفوظ بين الزيارات.

  3. 3

    اقرأ الفرق أو خذ الرقعة

    «جنبًا إلى جنب» للمراجعة البشرية، Unified لصيغة الرقعة ---/+++/@@. «انسخ unified diff» يضع رقعة نظيفة في حافظتك لمراجعة الكود أو patch -p1.

مزالق شائعة في الفرق

الملف بأكمله «تغيّر» بعد نسخ من Windows إلى Unix

لو ألصقت من Notepad على Windows فوق نسخة محرَّرة على Unix، سيُظهر كل سطر فروقات \r. فعِّل «تجاهل المسافات/التبويبات الزائدة» لإسكات أحرف CR.

✗ خطأ
Diff: 200 modifications (all because of trailing \r)
✓ صحيح
Ignore trailing spaces / tabs → 2 real changes

فرق المسافات البادئة يصرخ

إعادة تنسيق التبويبات ↔ المسافات تُفجِّر الفرق سطرًا بسطر. «تجاهل كل المسافات» يطوي الفرق إلى التغييرات الدلالية الحقيقية.

✗ خطأ
Diff: 87 modifications (all are indent changes)
✓ صحيح
Ignore all whitespace → 4 actual changes

فقرات متطابقة تُعلَن بسبب سطر فارغ واحد

إضافة أو حذف سطر فارغ وحيد في النثر قد تُسوّف منطقة كاملة. «تجاهل الأسطر الفارغة» يحلّ ذلك دون لمس المحتوى.

✗ خطأ
Diff: paragraph 2 'completely changed' (one blank line moved)
✓ صحيح
Ignore blank lines → no changes in paragraph 2

الفرق يقول «متطابق» لكن الملفَّين مختلفان

تقريبًا دائمًا خيار تجاهل للحالة أو المسافات تُرك مفعّلًا من جلسة سابقة. افتح لوحة «خيارات التجاهل» — كل المفاتيح معروضة هناك. أوقفها جميعًا لو أردت مقارنة صارمة بايتيًّا.

✗ خطأ
0 differences shown, but `cmp` says the files differ
✓ صحيح
Disable all Ignore options → real diff appears

JSON ملصوق يبدو وكأن «كل شيء تغيّر»

Text diff يعتبر ترتيب المفاتيح ذا أهمية؛ JSON لا. لحمولات JSON استخدم أداة JSON Diff المخصّصة — تتجاهل ترتيب المفاتيح وتحترم صرامة الأنواع.

✗ خطأ
Text diff on JSON: 100% of lines changed (just a key reorder)
✓ صحيح
<a href="/ar/tools/json-diff">JSON Diff</a>: 0 differences

تجاهلت تحذير اقتطاع الفرق

فوق 5,000 سطر لكل جانب يُقتطع المدخل. لو ظهر التحذير، انتقل إلى سطر الأوامر diff -u file1 file2 أو git diff --no-index — كلاهما يتدفّق ويتعامل مع غيغابايتات.

✗ خطأ
Pasted a 20,000-line log — only first 5,000 lines diffed
✓ صحيح
`diff -u a.log b.log` in terminal handles full file

حالات الاستخدام الشائعة

مقتطف مراجعة كود
ضع نسختَي دالة في الصندوقَين لترى إعادة تسمية أو فرعًا محذوفًا أو شرطًا حارسًا جديدًا في لمحة. إبراز الكلمات داخل السطر أسرع من مسح فرق GitHub لتغيير سطر واحد.
مراجعة عقد أو سياسة باللون الأحمر
ألصق عقد البارحة مقابل مراجعة اليوم. تقفز البنود المُدرَجة إلى البصر؛ تنطوي الفقرات غير المتغيّرة إلى رمادي. صدِّر unified patch لمسار المراجعة القانونية.
التحقيق في الجداول الزمنية للسجلات
قارن شريحة سجلّ ما قبل الحادثة بشريحة أثنائها. يطفو انجراف الكمون ورمز الحالة والتكرار فورًا دون awk.
مراجعة مسوّدة نثر
ألصق مسوّدتك ونسخة المحرّر. يُظهر فرق الكلمات داخل السطر أيّ الجمل أُعيدت كتابتها — ثمين لقبول التغييرات أو رفضها واحدًا واحدًا.
مراجعة ترجمة
قارن ترجمة قديمة بإعادة ترجمة لتأكيد أن النص الجديد يحافظ على المعنى والبنية والعناصر النائبة. فعِّل «تجاهل المسافات الزائدة» لإسكات الضوضاء التي يُدخلها المترجمون عادةً.
تدقيق ملف إعداد أو .env
قارن ملفَّي .env أو docker-compose.yaml أو shell rc. مع تفعيل «تجاهل الأسطر الفارغة»، يركّز الفرق على الفروقات الوظيفية بدلًا من ضوضاء التنسيق.

تفاصيل تقنية

LCS مع تقليم البادئة/الذيل
تُحذف الأسطر القائدة والذيلية المشتركة قبل تشغيل LCS بالبرمجة الديناميكية. فرق «ملفَّي إعداد من 2,000 سطر مع سطر واحد متغيّر» ينطوي إلى جدول 1×1 ويُعرض في أقل من ميلي ثانية.
فرق رمز داخل السطر
تُقرن قطع الحذف+الإضافة المتجاورة وتُرمَّز عبر مقاطع كلمة/غير كلمة/مسافة Unicode. تمريرة LCS ثانية تُنتج امتدادات الرموز الخضراء/الحمراء التي تجعل الأسطر المعدَّلة قابلة للقراءة.
unified diff = متوافق مع git/patch
تتبع المخرجات صيغة ---/+++/@@ -L,C +L,C @@ المعرَّفة لـ GNU patch والمستخدَمة في Git و GitHub وكل أدوات مراجعة الكود. طبِّق بـ pbpaste | patch -p0.
حدّ المدخل عند 5,000 سطر لكل جانب
فوق الحدّ يُقتطع الفرق ويُعرض تحذير. للمدخلات بحجم عدة ميغابايت استخدم سطر الأوامر diff -u أو git diff --no-index — تتدفّق وتتعامل مع غيغابايتات.

أفضل الممارسات

اختر خيارات التجاهل قبل القراءة
ضوضاء المسافات الزائدة و CRLF وحالة الأحرف تُغرق الإشارة. فعِّل الخيارات الصحيحة أوّلًا؛ يصبح الفرق أسهل قراءةً ولن تدرّب نفسك على تجاوز تغييرات «وهمية».
استخدم Unified للمشاركة، وجنبًا إلى جنب للمراجعة
الأعمدة البصرية لعينَيك. الرقع الموحَّدة لطرفيات الجميع. unified diff منسوخة تنزل في رسالة Slack أو تعليق Jira أو patch -p1 دون ترجمة.
تحقّق من النسبة المئوية للتطابق
لو كان ملفَّان «متطابقَين تقريبًا» لكن نتيجة التشابه 30٪، فلديك مشكلة نهاية أسطر أو مسافات. فعِّل «تجاهل كل المسافات» وأعد الفحص قبل قراءة الفرق.

الأسئلة الشائعة

هل يُرسَل النص الذي ألصقه إلى خادمكم؟
لا. كل عملية مقارنة تعمل عبر JavaScript داخل متصفحك. لا يُرفع نصّك ولا يُسجَّل ولا يُخزَّن على القرص ولا يُرسَل إلى أي طرف ثالث. فقط تفضيلات الواجهة (وضع العرض ومفاتيح خيارات التجاهل) تُحفظ في localStorage ليتذكّرها التطبيق في الزيارة التالية — لا النص أبدًا. يمكنك التحقّق بفتح DevToolsNetwork: لا يُطلَق أي طلب عند النقر على «الفرق».
ما الفرق بين Text Diff و JSON Diff؟
Text Diff يقارن سطرًا بسطر — مثالي للنثر، الكود، السجلات، العقود، وملفات الإعداد. أما JSON Diff فيفهم نموذج بيانات JSON: ترتيب المفاتيح غير مهم، والأنواع صارمة، وعناصر المصفوفات قابلة للمطابقة بالمفتاح. لو ألصقت JSON في text diff فستُعلَن إعادة ترتيب المفاتيح وفروقات المسافات كتغييرات؛ JSON Diff يتجاهلها. استخدم text diff للمحتوى غير المنظَّم، وJSON Diff لاستجابات الواجهات وحمولات الإعداد.
كيف أتجاهل المسافات أو حالة الأحرف أو الأسطر الفارغة؟
افتح لوحة «خيارات التجاهل» فوق نتيجة الفرق. «تجاهل حالة الأحرف» يجعل A و a متساويين. «تجاهل كل المسافات» يطوي كل مسافة وتبويب وسطر جديد قبل المقارنة. «تجاهل المسافات/التبويبات الزائدة» يحذف فقط المسافات في نهاية السطر — السلوك القياسي لـ git diff -b. «تجاهل الأسطر الفارغة» يُسقط الأسطر الفارغة أو التي تحوي مسافات فقط قبل المقارنة. كل خيار مستقلّ ويُحفظ بين الجلسات.
ما هو unified diff (ومتى أنسخه)؟
unified diff هو صيغة النص ---/+++/@@ التي تستخدمها patch و git apply ومراجعات GitHub ومعظم أدوات مراجعة الكود. انقر «انسخ unified diff» للحصول على رقعة (patch) مع ثلاثة أسطر من السياق حول كل تغيير — ألصقها في تقرير علّة، أو تعليق مراجعة، أو في أمر patch -p1 وستُطبَّق بنظافة. «جنبًا إلى جنب» للبشر، وunified diff للأجهزة (ولمراجعي الكود الذين يفكّرون كالأجهزة).
لماذا يظهر الفرق على أنه أسطر كاملة بينما عدّلت كلمة واحدة فقط؟
ليس كذلك — تمعّن أكثر. السطر بأكمله مُبرَز لأن شيئًا فيه قد تغيّر، لكن داخل الإبراز تحمل الرموز المتغيّرة وحدها الخلفية الزاهية (أخضر للإضافة، أحمر مع خط مشطوب للحذف). هذا فرق كلمات داخل السطر: يبقى سياق السطر مقروءًا بينما تستقرّ عينك على التعديل الدقيق. لو عُدِّل سطران متتاليان، فكلاهما يُظهر إبرازًا داخل السطر.
كيف تُعالَج نهايات الأسطر CRLF مقابل LF؟
كلاهما مُتعرَّف عليه. يقسّم الفرق على \r\n و \n و \r المنفرد، لذا تنتظم نصوص Windows CRLF و Unix LF و Mac CR القديم بشكل صحيح. لو أردت إبراز تغييرات نهاية السطر تحديدًا، اترك «تجاهل المسافات/التبويبات الزائدة» مُطفأً — سيظهر \r كمحرف زائد. ولمحو ضوضاء نهايات الأسطر كليًّا، فعِّل «تجاهل كل المسافات».
ما الحجم الأقصى للمدخلَين؟
تجري المقارنة في المسار الرئيسي للمتصفح، لذا فالحدود العملية حوالي 5,000 سطر أو 1 ميغابايت لكل جانب؛ فوق ذلك نقتطع ونعرض تحذيرًا. يُعطَّل الفرق المباشر فوق 200 كيلوبايت إجمالًا ويتحوّل إلى زرّ «الفرق» اليدوي. للملفات بحجم عدّة ميغابايت، استخدم سطر الأوامر diff -u أو git diff --no-index — تتدفّق وتتعامل مع غيغابايتات.
ماذا عن مقارنة الكود؟ هل يعرف لغتي؟
الفرق غير مرتبط بلغة: يرى أسطرًا ورموزًا، لا بنية تركيبية. هذه ميزة لمقتطفات المراجعة وتعديلات الإعدادات والرقع الملصوقة. لو أردت فرقًا دلاليًّا للكود (دالة أُعيد تسميتها عبر ملفات، أو على مستوى AST) فاستعمل git أو واجهة GitHub PR أو أداة فرق بنيوية مخصّصة. أمّا في 90٪ من حالات مراجعة الكود — تفحّص دالة، أو مقارنة مقتطفَين — ففرق الأسطر والكلمات هو ما تريده.
لماذا يظهر تعديل واحد أحيانًا كسطر محذوف زائد سطر مضاف؟
حين يكون التغيّر داخل السطر كبيرًا بحيث لا يُجدي إبراز مستوى الكلمة، يُبلَّغ عنه كسطرَي حذف وإضافة منفصلَين كي تبقى البنية نظيفة. ينتج نفس المنطق مخرجات قابلة للقراءة لإعادة صياغة النثر ولكتل الكود التي أُعيد كتابتها بدل تعديلها. بدّل إلى عرض Unified لرؤية زوج -/+ الكلاسيكي المستخدَم في الرقع.
كيف تُحسَب نسبة التطابق %؟
هي عدد الأسطر غير المتغيّرة (بعد تطبيق خيارات التجاهل) مقسومًا على الأكبر بين عددَي الأسطر، مع تثبيت السقف عند 100٪. مدخلان متطابقان = 100٪. إضافة سطر واحد إلى ملف من 100 سطر = 99٪. استبدال كل سطر = 0٪. مفيد للحكم السريع: «هل هذا تعديل صغير أم إعادة كتابة شاملة» قبل قراءة الفرق.
هل يمكنني مشاركة الفرق مع زميل؟
نعم، بطريقتين. (1) انقر «انسخ unified diff» وألصق الرقعة في الدردشة أو Slack أو تعليق PR — أيّ شخص لديه طرفية يستطيع تنفيذ patch < clip. (2) خذ لقطة شاشة من لوحة «جنبًا إلى جنب» للمراجعة البصرية. تعمّدنا عدم تقديم زر «المشاركة عبر رابط»: ذلك يتطلّب رفع نصّك، ولا نفعل ذلك.
هل يدعم الفرق اللغات من اليمين إلى اليسار مثل العربية والعبرية؟
نعم بالنسبة لمحتوى النص — الأسطر والرموز مدركة لـ Unicode. تستخدم الواجهة اتجاهات CSS المنطقية، لذا في المواضع RTL ينقلب عمود الرقم وأعمدة الأسطر طبيعيًّا. داخل خلية الفرق يتبع اتجاه النص المحتوى، فتُعرَض السلاسل العربية والعبرية بشكل صحيح بينما تبقى علامات +/- محاذية للرقم.

أدوات ذات صلة

عرض جميع الأدوات →

أداة اختبار regex — صحّح وطابق الأنماط أونلاين

معالجة النصوص

اختبر أنماط regex فوراً مقابل أي نص. إبراز مطابقات حي، ومجموعات التقاط، ومعاينة استبدال، وتقسيم، ومُفسّر أنماط. بنكهة JavaScript، خاص 100٪، بلا تسجيل.

عداد الكلمات والأحرف المجاني

معالجة النصوص

عُدّ الكلمات والأحرف والجمل والفقرات وزمن القراءة فوراً. عداد لحظي يتحقق من حدود Twitter ووصف SEO وInstagram. مجاني، خاص، بلا تسجيل.

محوّل الأنظمة العددية — ثنائي وست عشري وعشري وثماني

أدوات التحويل

حوّل بين الأنظمة الثنائية والست عشرية والعشرية والثمانية وأي أساس من 2 إلى 36 فوراً — أداة مجانية أونلاين تعمل في متصفّحك. جرّبها الآن.

محوّل Base64 — ترميز وفك ترميز أونلاين

الترميز والتنسيق

رمّز وفك ترميز Base64 مجاناً أونلاين — محوّل فوري مع دعم UTF-8 والرموز التعبيرية. خصوصية 100% — يعمل في متصفّحك. جرّبه الآن.

مولد crontab ومنشئ تعبير cron

التاريخ والوقت

أنشئ تعبيرات cron وتحقق منها وفُكَّها داخل متصفحك. معاينة مباشرة للتشغيل التالي بالتوقيت المحلي أو UTC. صيغة POSIX من خمسة حقول، قوالب جاهزة، ووصف بلغة طبيعية. مجاني، خاص، بلا تسجيل.

محوّل CSV إلى JSON

الترميز والتنسيق

حوّل CSV إلى JSON في متصفحك. RFC 4180، استنتاج الأنواع، صف العنوان، أمان الأعداد الكبيرة. خصوصية 100%.