2018-10-12 20:35:31 +00:00
|
|
|
---
|
|
|
|
title: Reuse Patterns Using Capture Groups
|
|
|
|
localeTitle: إعادة استخدام الأنماط باستخدام مجموعات الالتقاط
|
|
|
|
---
|
|
|
|
## إعادة استخدام الأنماط باستخدام Capture Group
|
|
|
|
|
|
|
|
## تلميح 1:
|
|
|
|
|
|
|
|
كود المقدمة أدناه:
|
|
|
|
|
|
|
|
`let testString = "test test test ";
|
|
|
|
let reRegex =/(test)\s\1/;
|
|
|
|
let result = reRegex.test(testString);
|
|
|
|
`
|
|
|
|
|
|
|
|
سوف تتطابق `result` مع `test test` فقط لأن `\1` في هذا المثال تشير إلى نفس النص الذي تم مؤخرًا تطابقه مع المجموعة الأولى `(test)` .
|
|
|
|
|
|
|
|
إذا كنا سنترجم التعبير المعتاد حرفياً ، فسيبدو شيئًا كالتالي:
|
|
|
|
|
2018-12-12 23:48:22 +00:00
|
|
|
`let re = /(test)\s\1/;
|
|
|
|
let literalRe = /test\stest/;
|
2018-10-12 20:35:31 +00:00
|
|
|
`
|
|
|
|
|
|
|
|
كل من `rea` و `literalRe` تطابق نفس الشيء.
|
|
|
|
|
|
|
|
## تلميح 2:
|
|
|
|
|
|
|
|
نظرا للرمز أدناه:
|
|
|
|
|
|
|
|
`let testString = "test test test ";
|
|
|
|
let reRegex =/(test)(\s)\1\2\1/;
|
|
|
|
let result = reRegex.test(testString);
|
|
|
|
`
|
|
|
|
|
|
|
|
سيطابق `test test test` كامل `test test test` بسبب: `\1` يكرر (اختبار) `\2` يكرر (\\ s)
|
|
|
|
|
|
|
|
## تلميح 3:
|
|
|
|
|
|
|
|
الكود أدناه:
|
|
|
|
|
|
|
|
`let testString = "test test test test test test";
|
|
|
|
let reRegex =/(test)(\s)\1\2\1/g;
|
|
|
|
let result = reRegex.test(testString);
|
|
|
|
`
|
|
|
|
|
|
|
|
نظرًا لأننا استخدمنا `\g` ، فلن يعود التعبير المعتاد الخاص بنا بعد أول مباراة كاملة ( `test test test` ) ويطابق كل التكرار.
|
|
|
|
|
|
|
|
## تنبيه المفسد - الحل إلى الأمام!
|
|
|
|
|
|
|
|
## حل:
|
|
|
|
|
|
|
|
`let repeatNum = "42 42 42";
|
|
|
|
let reRegex = /^(\d+)\s\1\s\1$/;
|
|
|
|
let result = reRegex.test(repeatNum);
|
2018-12-12 23:48:22 +00:00
|
|
|
`
|