مقارنة النصوص واكتشاف الفروقات
قارن نصّين فورًا داخل متصفحك. عرض جنبًا إلى جنب مع إبراز الفروقات على مستوى الكلمة، وتصدير unified diff، وتجاهل حالة الأحرف والمسافات والأسطر الفارغة. خصوصية كاملة — نصّك لا يغادر جهازك.
خيارات التجاهل
ما هي مقارنة النصوص؟
مقارنة النصوص هي مقارنة بنيوية بين مستندَين نصّيَّين تكتشف أصغر مجموعة من الإدراجات والحذوفات اللازمة لتحويل أحدهما إلى الآخر. تجعل المخرجات التغيير مرئيًّا: أخضر للأسطر المضافة، أحمر للمحذوفة، إمّا جنبًا إلى جنب أو بصيغة 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
ألصق النسختَين
النص الأصلي على اليمين، المعدَّل على اليسار. يُعرض الفرق المباشر أثناء الكتابة؛ المدخلات الكبيرة (أكثر من 200 كيلوبايت إجمالًا) تتحوّل إلى زرّ «الفرق» اليدوي.
- 2
فعِّل خيارات التجاهل التي تحتاجها
تجاهل حالة الأحرف، تجاهل كل المسافات، تجاهل المسافات الزائدة، أو تجاهل الأسطر الفارغة — كل منها مستقلّ ومحفوظ بين الزيارات.
- 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٪، فلديك مشكلة نهاية أسطر أو مسافات. فعِّل «تجاهل كل المسافات» وأعد الفحص قبل قراءة الفرق.
الأسئلة الشائعة
هل يُرسَل النص الذي ألصقه إلى خادمكم؟
ما الفرق بين Text Diff و JSON Diff؟
كيف أتجاهل المسافات أو حالة الأحرف أو الأسطر الفارغة؟
ما هو unified diff (ومتى أنسخه)؟
لماذا يظهر الفرق على أنه أسطر كاملة بينما عدّلت كلمة واحدة فقط؟
كيف تُعالَج نهايات الأسطر CRLF مقابل LF؟
ما الحجم الأقصى للمدخلَين؟
ماذا عن مقارنة الكود؟ هل يعرف لغتي؟
لماذا يظهر تعديل واحد أحيانًا كسطر محذوف زائد سطر مضاف؟
كيف تُحسَب نسبة التطابق %؟
هل يمكنني مشاركة الفرق مع زميل؟
هل يدعم الفرق اللغات من اليمين إلى اليسار مثل العربية والعبرية؟
أدوات ذات صلة
عرض جميع الأدوات →أداة اختبار 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%.