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); 
							 | 
						||
| 
								 | 
							
								`
							 |