تضع رموز الدولار في نص الاستبدال، فيعيد الناتج جزءًا من النص القديم ويختصر الدولارات؛ لسلسلة الاستبدال رموز خاصة تُفسَّر عند استخدامها. [2]
لإدخال نص الاستبدال حرفيًا، مرّر إلى replaceAll دالة تعيد ذلك النص بدل تمريره كسلسلة مباشرة. [3]
الخلاصة السريعة
- يمكن أن يكون البحث سلسلة حرفية؛ وجود أقواس فيها لا يحوّلها تلقائيًا إلى تعبير نمطي. [1]
- في سلسلة الاستبدال، الدولار المتبوع بعلامة العطف يعيد المطابقة، والدولاران المتجاوران ينتجان دولارًا واحدًا. [2]
- إرجاع النص من دالة الاستبدال يدرجه كما هو، دون تفسير رموز الدولار داخله. [3]
- تعيد replaceAll سلسلة جديدة وتترك الأصل كما هو؛ احتفظ بالقيمة المعادة التي تريد استخدامها. [1]
حدّد ما تبحث عنه أولًا
يمكن أن يكون البحث سلسلة حرفية؛ وجود أقواس فيها لا يحوّلها تلقائيًا إلى تعبير نمطي. [1]
نفّذ المقاطع بالترتيب في وحدة تحكم المتصفح. نبحث عن العلامة مرتين، وتُطابق الأقواس ضمن العلامة نفسها لأن الوسيط الأول سلسلة نصية. [1]
البحث عن needle حرفي، لكن تفسير replacement مسألة مستقلة يحددها الوسيط الثاني. [1] [2]
مرّر الشيفرة أفقيًا عند الحاجة.
const text = "A[tag]B[tag]";
const needle = "[tag]";
const replacement = "$&/$$";راقب تفسير رموز الاستبدال
في سلسلة الاستبدال، الدولار المتبوع بعلامة العطف يعيد المطابقة، والدولاران المتجاوران ينتجان دولارًا واحدًا. [2]
المثال التالي يعيد العلامة التي وجدها، ثم شرطة مائلة ودولارًا واحدًا، في كل موضع. ظهور العلامة القديمة في الناتج لا يعني فشل البحث؛ رمز الدولار والعطف هو الذي أعادها. [2]
يعمل هذان الرمزان حتى عندما يكون البحث نصًا عاديًا. لا تفترض أن تجنب التعبير النمطي يجعل سلسلة الاستبدال كلها حرفية. [2]
مرّر الشيفرة أفقيًا عند الحاجة.
const interpreted = text.replaceAll(needle, replacement);
console.log(interpreted); // A[tag]/$B[tag]/$أعد النص من دالة قصيرة
إرجاع النص من دالة الاستبدال يدرجه كما هو، دون تفسير رموز الدولار داخله. [3]
أبقِ needle وreplacement كما هما، وغيّر شكل الوسيط الثاني فقط. تعيد الدالة السهمية replacement نفسه لكل مطابقة؛ لذلك يحتفظ الناتج بعلامة العطف وبالدولارين بدل اختصارهما أو استبدالهما بالمطابقة. [3]
يفصل معيار JavaScript بين المسارين: يستدعي الدالة للحصول على نص الاستبدال إن كان الوسيط قابلًا للاستدعاء، ويعالج قالب الاستبدال في المسار النصي الآخر. لا يحتاج هذا المثال إلى تغيير محتوى النص المراد إدراجه. [3]
مرّر الشيفرة أفقيًا عند الحاجة.
const literal = text.replaceAll(needle, () => replacement);
console.log(literal); // A$&/$$B$&/$$افحص الناتج واترك الأصل معلومًا
تعيد replaceAll سلسلة جديدة وتترك الأصل كما هو؛ احتفظ بالقيمة المعادة التي تريد استخدامها. [1]
المتغير interpreted يحفظ النتيجة الأولى، ويحفظ literal الثانية. أما text فما زال يحمل المدخل الأصلي، كما يبين الاختبار الأخير. إذا عرض تطبيقك text مجددًا، فلن يظهر فيه الاستبدال الذي حفظته في متغير آخر. [1]
قارن الناتجين، خصوصًا علامة العطف وعدد الدولارات؛ أبقِ البحث نصيًا في هذه التجربة. [1] [2]
مرّر الشيفرة أفقيًا عند الحاجة.
console.log(text); // A[tag]B[tag]
console.log(text === "A[tag]B[tag]"); // trueالمصادر ومتابعة القراءة
- MDN: البحث والقيمة المعادة في replaceAll (يفتح في نافذة جديدة)developer.mozilla.org
- MDN: رموز سلسلة الاستبدال (يفتح في نافذة جديدة)developer.mozilla.org
- ECMAScript: مسارا الاستبدال النصي والدالة (يفتح في نافذة جديدة)tc39.es
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.