أدوات النص واليومية · مجموعة أدوات النص
لماذا يجب أن تنجو أداة البحث والاستبدال من التعبير العادي نصف المكتوب
· لماذا يهم
البحث والاستبدال التعبيرات العادية تحرير النص
تكون كتابة النمط تزايدية، لذا فإن قوس الفتح المنفرد هو حالة عادية؛ يجادل هذا المنشور بأن حماية التجميع وترك النص دون مساس وعرض التراجع هي ميزات صحيحة وليست صقلًا.
الأداة التي أزالت الصندوق من قوس غير متوازن - كيف يمكن لضغطة مفتاح واحدة أن تدمر ساعة من التنظيف
غالبًا ما يحتوي مربع البحث والاستبدال على عمل استغرق تجميعه وقتًا أطول بكثير من نمط البحث المجاور له. إذا كان من الممكن ظهور تعبير غير مكتمل عبر الواجهة أو مسح المحرر أو ترك حالته غير مؤكدة، فإن الأداة جعلت إدخال النمط أكثر خطورة من مهمة التنظيف التي كان من المفترض أن تبسطها.
لا يوثق المستودع حادثة محددة قام فيها ToolAcre بمحو ساعة عمل، لذا لا يمكن تقديم هذه القصة على أنها حقيقة. الشرط الذي يمكن الدفاع عنه أقوى على أي حال: يجب أن يظل نص المستخدم دون تغيير عندما يفشل تجميع الأنماط، بغض النظر عن مقدار النص الموجود أو المدة التي يستغرقها التحضير.
الفشل المدمر الذي يجب أن تمنعه أداة البحث والاستبدال
لا يتم عادةً إدخال التعبيرات العادية بضغطة مفتاح واحدة مثالية. يقوم الشخص بكتابة قوس فتح قبل قوس الإغلاق الخاص به، أو يبدأ فئة أحرف بقوس فتح قبل إضافة أعضائها. خلال تلك اللحظات، يحتوي الحقل على نمط غير مكتمل من الناحية النحوية على الرغم من أن عملية التحرير تسير بشكل طبيعي.
إن التعامل مع هذه الحالة المؤقتة باعتبارها سلوكًا استثنائيًا للمستخدم ينتج عنه محررًا هشًا. الاستجابة المفيدة هي ردود فعل محلية فورية: أظهر أن النمط الحالي لا يمكن تجميعه، والحفاظ على كل الحقول الأخرى، والسماح لضغطة المفتاح التالية بإصلاحه. يجب أن يصف خطأ التعبير العادي غير الصالح المسودة الحالية، وليس إنهاء سير العمل.
تعتبر الأنماط غير المكتملة أمرًا طبيعيًا أثناء كتابة التعبير العادي
يقوم ToolAcre بتوجيه كل عملية بحث يقدمها المستخدم من خلال `compilePattern`. تتجنب عمليات البحث الحرفية أولاً الأحرف الأولية ذات التعبير العادي، بينما يستخدم وضع Regex المصدر المتوفر مباشرة. يحدث التجميع داخل كتلة `try`، ويؤدي الفشل إلى إرجاع نمط فارغ بالإضافة إلى سلسلة خطأ بدلاً من السماح للاستثناء JavaScript بالهروب إلى الواجهة.
تتحكم هذه النتيجة في مسار الاستبدال. عندما يُبلغ التحويل البرمجي عن خطأ، فإن `findReplace` يُرجع النص الأصلي، بدون أي بدائل أو خطأ. لا يحاول البحث الجزئي أو إعادة الكتابة. وبالتالي، يحمي الحارس استقرار الواجهة وسلامة البيانات: عدم وجود نمط صالح يعني عدم حدوث تغيير في محتويات المحرر.
الإبلاغ عما حدث - لماذا يعتبر عدد الاستبدال بعد كل تشغيل هو أسرع فحص للسلامة
من الممكن أن يكون الاستبدال الناجح خاطئًا من الناحية المنطقية. قد يتطابق التعبير العام مع تواريخ أكثر مما هو مقصود، بينما قد يؤدي خيار الحالة أو حد الكلمة بالكامل إلى تقليل المجموعة إلى الصفر. ToolAcre يحسب التطابقات قبل استدعاء استبدال السلسلة القياسية ويعيد هذا الرقم مع النص المعاد كتابته، مما يجعل النطاق مرئيًا بعد كل تشغيل.
يعد العد بمثابة فحص سريع للعقل وليس دليلاً على أن كل مباراة كانت مرغوبة. إذا كان من المتوقع وجود اثني عشر سجلاً وكانت النتيجة 1 أو 1,200، فتوقف وافحص النموذج قبل نسخ المخرجات. الرقم الدقيق يحول الشك الغامض إلى سبب ملموس للتراجع عن البحث ومراجعته.
التراجع كشبكة أمان - كل تحويل يمكن عكسه، مع حد موثق يبلغ خمسين عملية
يمنع أمان التجميع الأنماط غير الصالحة من تغيير النص، لكن الأنماط الصالحة لا تزال قادرة على التعبير عن النية الخاطئة. التراجع يغطي تلك الفئة الثانية. تسجل مجموعة أدوات النص التحويلات بحيث يمكن عكس الاستبدال المكتمل بعد أن يكشف عدد النتائج أو المخرجات أن البحث كان واسعًا جدًا أو ضيقًا جدًا أو تم تجميعه بشكل غير صحيح.
الحد الأقصى للمحفوظات الموثقة هو خمسون عملية، لذا فإن التراجع يعد مخزنًا مؤقتًا فعالاً وليس تحكمًا دائمًا في الإصدار. استخدمه للتجربة بخطوات صغيرة، لكن لا تعامله كمخزن أرشيفي. بالنسبة للمواد المهمة، احتفظ بالأصل بشكل منفصل وانسخ المخرجات النهائية فقط بعد مراجعة كل من النص وعدد الاستبدال.
مثال عملي - إنشاء نمط إعادة تنسيق التاريخ حرفًا بحرف ومشاهدة الخطأ يظهر ويختفي دون فقدان النص
خذ بعين الاعتبار تغيير التواريخ من `2024-01-02` إلى `02/01/2024`. قم بتمكين Regex وابدأ بقوس فتح. في تلك اللحظة، أبلغ محرك المتصفح عن تعبير غير صالح، وظهر ToolAcre للرسالة، ويظل النص كما هو. أضف `\d{4}` وقوس الإغلاق، وستصبح تلك السنة التي تم التقاطها صالحة.
استمر حتى يصبح البحث `(\d{4})-(\d{2})-(\d{2})`، ثم استخدم `$3/$2/$1` كبديل. الثلاثة تلتقط إعادة ترتيب السنة والشهر واليوم دون إعادة كتابة كل سطر. قم بتشغيل استبدال الكل، وقارن العدد المبلغ عنه بالصفوف المتوقعة، وقم بالتراجع فورًا إذا كان النص الرقمي غير ذي الصلة متطابقًا أيضًا.
ما لا يغطيه هذا هو مشكلات أداء التعبير العادي مثل التراجع الكارثي على المدخلات الضخمة
يعالج حارس الترجمة أخطاء بناء الجملة، وليس وقت تشغيل التعبيرات الصالحة. يمكن تجميع النمط بنجاح مع التراجع بشكل كبير عن مدخلات معينة. نظرًا لأن الاستبدال يعمل على مؤشر الترابط الرئيسي، فإن التعبير المرضي المطبق على مستند كبير من الممكن أن يجعل علامة تبويب المتصفح غير مستجيبة على الرغم من عدم طرح أي استثناء.
تقوم الأداة أيضًا بإجراء استبدال الكل بدلاً من التنقل خلال التطابقات بشكل فردي، ولا تقوم بمعاينة التطابقات المميزة قبل إجراء التغيير. تجعل هذه الحدود بيانات الاختبار الضيقة وعدد الاستبدال أمرًا مهمًا. التحقق من صحة التعبير غير المألوف على عينة تمثيلية صغيرة قبل تطبيقه على النسخة الوحيدة من مستند كبير.
الفكرة الأساسية — تتعامل مجموعة أدوات النص مع الأنماط غير الصالحة على أنها معلومات، وليست فشلًا، حتى تتمكن من التجربة بأمان
النمط غير المكتمل هو معلومات حول حالة التحرير، وليس دليلاً على فشل المستخدم. ToolAcre يحتفظ بهذا التمييز في قيم الإرجاع الخاصة به: يمكن للتجميع الإبلاغ عن خطأ دون رمي، ويمكن للاستبدال الإبلاغ عن صفر تغييرات دون لمس المصدر، ويمكن للعملية الناجحة الإبلاغ بالضبط عن عدد التطابقات التي أعيد كتابتها.
يدعم هذا التصميم التجريب دون التظاهر بأن التعبيرات العادية غير ضارة. احتفظ بالمدخلات عند فشل الترجمة، وافحص الأعداد بعد النجاح، واستخدم التراجع عندما يكون النمط الصالح خاطئًا من الناحية المفاهيمية. تعمل هذه السلوكيات معًا على جعل عملية البحث والاستبدال قابلة للتنبؤ بما يكفي لمستخدمي التعبير العادي الذين يحتاجون إلى تعليقات أكثر من العقاب على تعبير نصف مكتوب.