55 lines
1.6 KiB
Markdown
55 lines
1.6 KiB
Markdown
|
---
|
||
|
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)` .
|
||
|
|
||
|
إذا كنا سنترجم التعبير المعتاد حرفياً ، فسيبدو شيئًا كالتالي:
|
||
|
|
||
|
`let re = /(test)\s\1;
|
||
|
let literalRe = /test\stest;
|
||
|
`
|
||
|
|
||
|
كل من `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);
|
||
|
`
|