العربية

أدوات النص واليومية · مجموعة أدوات النص

لماذا يتطابق ^ و$ مرة واحدة فقط: يتم البحث عن علامات regex في المتصفح واستبدالها

· كيف يعمل

التعبيرات العادية البحث والاستبدال تنظيف النص

قائمة متعددة الأسطر تعرض نقطة ربط نص كامل وحدود أسطر جديدة صريحة ومتكررة
الرسم التوضيحي المتجه الأصلي ToolAcre

يشرح علامات JavaScript regex - العالمية، ومتعددة الأسطر، وdotAll - ولماذا يتم تجميع مربع البحث والاستبدال بدون نقاط ربط متعددة الأسطر ^ و$ للنص بأكمله، مع أنماط تعمل بدلاً من ذلك.

النمط الذي ثبت السطر الأول فقط - ماذا يحدث عندما تتوقع أن يعني ^ "بداية كل سطر"

قد تحتوي القائمة الملصقة على نفس البادئة غير المرغوب فيها في كل صف، إلا أن البحث عن `^prefix` يؤدي إلى إزالتها من الصف الأول فقط. وتأتي النتيجة المفاجئة من تكوين النمط، وليس من البيانات غير المتسقة. في ToolAcre، يحدد `^` بداية النص الكامل لأن التعبير العادي يتم تجميعه بدون وضع متعدد الأسطر.

يتبع مرساة `$` المتطابقة نفس القاعدة على الحافة الأخرى: فهي تحدد نهاية النص الكامل، وليس كل سطر ينتهي بداخله. يظل فاصل الأسطر جزءًا من الإدخال، لكنه لا يصبح موضع ربط آخر. تحقق من عدد الاستبدال المُبلغ عنه قبل استيراد القائمة المنظفة؛ العد واحد يكشف عدم التطابق على الفور.

العلم g - لماذا يعتمد "استبدال كل مباراة في تمريرة واحدة" على العلم العالمي الذي يتم تعيينه

يقوم ToolAcre دائمًا بإنشاء نمط البحث الخاص به باستخدام العلامة العامة `g`. يخبر هذا الاختيار JavaScript بجمع كل التطابقات غير المتداخلة بدلاً من التوقف بعد التطابق الأول. تستدعي الأداة أولاً `match` لتحديد العدد، ثم تمرر نفس النمط العام إلى `replace`، لذا يستخدم الرقم المعروض وبطاقة المرور البديلة قاعدة مطابقة واحدة.

لا يمكن للمطابقة العامة إنشاء مواضع لا يتعرف عليها النمط. مع `^prefix`، هناك بداية مؤهلة واحدة فقط للنص الكامل، لذلك لا يزال `g` يجد تطابقًا واحدًا. مع النمط الذي يمكن أن يحدث في عدة صفوف، يسمح `g` باستبدال كافة الأحداث. افصل بين هذه الأسئلة عند تصحيح الأخطاء: تحدد نقاط الارتساء المكان الذي يمكن أن تبدأ فيه المطابقة، بينما يقرر الوضع العام ما إذا كان البحث سيستمر أم لا.

العلامة m - كيفية تغيير الأسطر المتعددة ^ و$ من نقاط ربط النص بالكامل إلى نقاط ربط الأسطر، ولماذا تتركها هذه الأداة قيد التشغيل

تغير علامة `m` متعددة الأسطر كيفية تفسير `^` و`$`، مما يسمح لهم بالتعرف على المواضع حول نهايات الأسطر بالإضافة إلى حدود النص الخارجية. ToolAcre لا يضيف هذه العلامة. يستخدم المترجم الخاص به `g` لعمليات البحث الحساسة لحالة الأحرف و`gi` عندما يتم مسح حساسية حالة الأحرف، دون تحكم المستخدم في العلامات الإضافية.

يؤدي ترك أسطر متعددة غير متاحة إلى إبقاء الواجهة صغيرة، ولكن هذا يعني أن الأنماط المنسوخة من محرر تم تكوينه باستخدام `gm` قد تتصرف بشكل مختلف هنا. لا تفترض أن التعبير المألوف يحمل أعلامه معه. يتم توفير أحرف العلامة JavaScript عند إنشاء RegExp، وترفض هذه الأداة بناء جملة العلامة المضمنة غير المدعومة بدلاً من تمكين وضع آخر بصمت.

علامة s - لماذا لا تتطابق النقطة مع السطر الجديد بشكل افتراضي، وكيفية المطابقة عبر الخطوط بدونها

النقطة في هذه الأداة لا تتطابق مع فاصل الأسطر لأن المترجم يحذف أيضًا علامة dotAll `s`. يمكن أن يتطابق نمط مثل `BEGIN.*END` عندما تكون كلا العلامتين على سطر واحد، ولكنه يتوقف عند فاصل السطر الأول عندما تمتد العلامات إلى عدة صفوف. لا تؤدي إضافة الوضع العام إلى تغيير ما يمكن أن تستهلكه النقطة نفسها.

عندما تكون هناك حاجة حقيقية لمطابقة الخطوط المتقاطعة، اكتب الأحرف المسموح بها بشكل صريح. فئة مثل `[\s\S]*?` يمكن أن تمتد عبر المسافات البيضاء والمسافات غير البيضاء مع بقائها مترددة، على الرغم من أن الأنماط العريضة تستحق الاختبار على عينة صغيرة أولاً. يلتقط المحول البرمجي بناء جملة غير صالح، ولكنه لا يحمي علامة التبويب من تعبير باهظ الثمن ذو سلوك تراجعي شديد.

مطابقة الأسطر الجديدة بشكل صريح - يبدأ استخدام \n في النمط لاستهداف السطر وينتهي عندما لا يكون الأسطر المتعددة متاحًا

بالنسبة إلى الأسطر المتكررة التي تبدأ بدون وضع الأسطر المتعددة، قم بمطابقة بداية النص أو السطر الجديد: `(^|\n)prefix`. يعالج البديل الأول الصف الأول، ويتعامل الثاني مع الصفوف اللاحقة عن طريق استهلاك السطر الجديد السابق. تلتقط الأقواس الحدود المطابقة، مما يمنح البديل طريقة للاحتفاظ بالبنية التي تفصل بين الخطوط.

تفترض هذه التقنية فواصل تغذية الأسطر في النموذج. تتعرف مكتبة النصوص على CRLF، وLF، وCR الوحيد عند إجراء عمليات سطر مخصصة، ولكن البحث عن السلسلة الأصلية واستبدالها يبحث مباشرة. إذا كان المحتوى الملصق يستخدم نموذجًا آخر لنهاية السطر، فقم بتطبيعه أولاً أو تعديل التعبير عمدًا؛ وإلا فإن الصفوف اللاحقة قد تظل دون تغيير على الرغم من أنها تبدو متطابقة على الشاشة.

قم بمطابقة حدود الأسطر بشكل صريح مع (^|\n) واحتفظ بالفاصل الذي تم التقاطه

لنفترض أن الإدخال هو `ID: apple`، و`ID: pear`، و`ID: plum` في أسطر منفصلة. قم بتمكين Regex، وابحث عن `(^|\n)ID: `، واستبدله بـ `$1`. في الصف الأول، `$1` هو موضع البداية الفارغ؛ وفي الصفوف اللاحقة، يكون هو السطر الجديد الذي تم التقاطه. تختفي التسميات بينما تظل حدود الصفوف الثلاثة في مكانها.

اقرأ عدد الاستبدال قبل قبول النتيجة. يجب أن تنتج ثلاثة صفوف ثلاثة بدائل في هذا المثال. إذا كان العدد واحدًا، فافحص النمط الفعلي ونهايات الأسطر بدلاً من تكرار العملية. يتوفر التراجع بعد الاستبدال، لذلك يمكن لتجربة صغيرة تأكيد كل من المطابقة وإعادة البناء قبل أن يمس نفس التعبير قائمة استيراد أطول.

ما لا يغطيه هذا - علامات u وi وy، وإدراج أسطر جديدة في الاستبدال، وهو ما لا يستطيع الحقل المكون من سطر واحد القيام به

يستخدم التنفيذ أيضًا `i` عند إيقاف تشغيل حساسية حالة الأحرف، ولكنه لا يكشف عن أي عناصر تحكم في `u`، أو `y`، أو `m`، أو `s`. لا تقوم هذه المقالة بتعيين سلوك لتلك الأوضاع غير المتوفرة بخلاف توضيح تأثيرات الأسطر المتعددة والنقاط المفقودة المطلوبة للمثال. يجب مراجعة الأنماط من بيئة JavaScript أخرى مقابل العلامات التي يجمعها ToolAcre فعليًا.

يثبت المصدر أنه تم تمرير النص البديل إلى JavaScript `String.replace`، لذا فإن البدائل مثل `$1`، و`$&`، و`$$` تحتفظ بمعانيها JavaScript. ولا يقوم بتأسيس كل تفاعل يقدمه الحقل المقدم من الملفات المستخدمة هنا. على وجه الخصوص، يجب اختبار إدراج خطوط جديدة فعلية عبر الواجهة بدلاً من الاستدلال عليها من المخطط التفصيلي وحده.

العلامات الأخرى وسلوك حقل الاستبدال تقع خارج نطاق تطبيق هذه الأداة

تعامل مع العلامات كجزء من التعبير العادي، حتى عندما تعرض الواجهة نص النمط فقط. في ToolAcre، يكون كل بحث عموميًا، ويضيف الوضع الاختياري غير الحساس لحالة الأحرف `i`، ولا توجد أسطر متعددة وdotAll. تشرح هذه الحقائق سبب استمرار الاستبدال عبر التطابقات العادية بينما تحتفظ `^` و`$` وdot بقيود النص الكامل والسطر المفرد الافتراضية الخاصة بها.

بالنسبة للقائمة الملصقة ذات البادئة، يعد `(^|\n)prefix` مع `$1` هو الحل العملي لأنه يقوم بتسمية الحدود والحفاظ عليها. ابدأ بالصفوف التمثيلية، وقم بتأكيد العدد، وافحص بنية الخط الناتج، وبعد ذلك فقط قم بمعالجة مجموعة البيانات الكاملة. يقوم هذا الإجراء بتحويل نتيجة مطابقة واحدة محيرة إلى خطوة تنظيف قابلة للمراجعة قبل الاستيراد.