$regexReplace (استبدال بالتعبير النمطي)
آخر تحديث: 2026-10-09
$regexReplace (استبدال بالتعبير النمطي)
يطابق $regexReplace نصًا بتعبير نمطي ويستبدله بسلسلة معينة — أداة متقدمة لتنظيف النصوص في خطوط الأنابيب. يمكن للبديل أن يشير إلى مجموعات الالتقاط عبر $1 و $2 لتدفقات استخراج-وإعادة-بناء. يدعم options علامات مثل i و m و x. على عكس $replaceAll (اللفظي فقط)، يعمل $regexReplace على الأنماط. طُوّر في MongoDB 4.4. المدخل الفارغ يُرجع null.
| الفئة | النص |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $regexReplace: { input: <string-expression>, regex: <pattern>, replacement: <replacement>, options: <options> } }
⚙️ المعلمات
| input | مطلوب؛ النص المراد معالجته. |
|---|---|
| regex | مطلوب؛ نص نمط تعبير نمطي متوافق مع Perl. |
| replacement | مطلوب؛ نص الاستبدال، حيث يشير $1/$2 إلى مجموعات الالتقاط. |
| options | أعلام اختيارية مثل i وm وx. |
القيمة المرجعة:النص المستبدَل؛ null إذا كان الإدخال null.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $regexReplace: إخفاء الأرقام الأربعة الوسطى من الهواتف
db.users.aggregate([
{ $project: { masked: { $regexReplace: { input: '$phone', regex: '(\\d{3})\\d{4}(\\d{4})', replacement: '$1****$2' } } } }
])
المخرجات:
{ "_id": 1, "masked": "138****8000" }
{ "_id": 2, "masked": "139****1234" }
📌 ملاحظات
- $1/$2 في البديل تشير إلى مجموعات الالتقاط؛ اهرب من $ الحرفي بعلامة \
- على عكس $replaceAll (اللفظي)، يستبدل $regexReplace حسب النمط
- عدم التطابق يعني إعادة السلسلة المدخلة دون تغيير
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qكيف أشير إلى مجموعات الالتقاط في البديل؟
Aاستخدم $1 و $2 بترتيب مجموعات الالتقاط.
Qماذا لو لم يتطابق شيء؟
Aتُعاد السلسلة المدخلة دون تغيير.
Qأيهما أختار، $regexReplace أم $replaceAll؟
Aالأنماط تحتاج $regexReplace؛ والاستبدالات اللفظية البسيطة أسرع بـ $replaceAll.