You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 9-regular-expressions/01-regexp-introduction/article.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,14 +1,14 @@
1
1
# الگو ها و پرچم ها (Patterns and flags)
2
2
3
-
عبارات باقاعده(Regular expressions) الگوهایی هستند که روشی قدرتمند برای جستجو و جایگزینی در متن ارائه می دهند.
3
+
عبارات باقاعده(Regular expressions) الگوهایی هستند که روشی قدرتمند برای جستجو و جایگزینی در متن ارائه می دهند.
4
4
5
-
در جاوا اسکریپت، آنها از طریق شیء [RegExp](mdn:js/RegExp) و همچنین به خوبی با متد های رشته ها ادغام می شوند.
5
+
در جاوا اسکریپت، آنها از طریق شیء [RegExp](mdn:js/RegExp)استفاده می شوند و همچنین به خوبی با متد های رشته ها ادغام می شوند.
6
6
7
7
## عبارات باقاعده (Regular Expressions)
8
8
9
-
عبارت باقاعده (همچنین "regexp"، یا فقط "reg") از یک *الگو(pattern)* و *پرچم(flags)* های اختیاری تشکیل شده است.
9
+
عبارت باقاعده (همچنین "regexp"، یا فقط "reg") از یک *الگو(pattern)* و *پرچم(flags)* های اختیاری تشکیل می شوند.
10
10
11
-
دو سینتکس وجود دارد که می توان از آنها برای ایجاد یک شیء عبارت باقاعده استفاده کرد.
11
+
دو روش وجود دارد که می توان از آنها برای ایجاد یک شیء عبارت باقاعده استفاده کرد.
12
12
13
13
سینتکس "طولانی":
14
14
@@ -20,14 +20,14 @@ regexp = new RegExp("pattern(الگو)", "flags(پرچم)");
20
20
21
21
```js
22
22
regexp =/pattern/; // بدون پرچم
23
-
regexp =/pattern/gmi; // با پرچم g, m, i (به زودی پوشش داده میشود)
23
+
regexp =/pattern/gmi; // با پرچم g, m, i (به زودی پوشش داده می شود)
24
24
```
25
25
26
-
اسلش های `pattern:/.../` به جاوا اسکریپت می گوید که ما در حال ایجاد یک عبارت باقاعده هستیم. آنها همان نقش کوتیشن('') را برای رشته ها بازی می کنند.
26
+
اسلش های `pattern:/.../` به جاوا اسکریپت می گوید که ما در حال ایجاد یک عبارت باقاعده هستیم. آنها همان نقش کوتیشن(') را برای رشته ها بازی می کنند.
27
27
28
-
در هر دو مورد، `regexp` به یک نمونه از کلاس داخلی `RegExp` تبدیل میشود.
28
+
در هر دو مورد، `regexp` به یک نمونه از کلاس داخلی `RegExp` تبدیل می شود.
29
29
30
-
تفاوت اصلی بین این دو سینتکس در این است که الگو با استفاده از اسلشهای `/.../`، اجازه درج عبارات را نمی دهد (مانند حروف الفبای قالب(template literals) رشته با `${...}`). آنها کاملا ساکن هستند.
30
+
تفاوت اصلی بین این دو سینتکس این است که الگو با استفاده از اسلشهای `/.../`، اجازه درج عبارات را نمی دهد (مانند حروف الفبای قالب(template literals) رشته با `${...}`). که آنها کاملا ساکن هستند.
31
31
32
32
اسلش ها زمانی استفاده می شوند که عبارت باقاعده را در زمان نوشتن کد بدانیم -- و این رایج ترین حالت است. در حالی که `new RegExp` بیشتر زمانی استفاده می شود که ما نیاز به ایجاد یک regexp "در حال پرواز" از یک رشته تولید شده به صورت پویا داشته باشیم. برای مثال:
33
33
@@ -39,9 +39,9 @@ let regexp = new RegExp(`<${tag}>`); // مانند /<h2>/ اگر در اعلان
39
39
40
40
## پرچم ها (Flags)
41
41
42
-
عبارات باقاعده ممکن است دارای پرچم هایی باشند که بر جستجو تأثیر می گذارد.
42
+
عبارات باقاعده ممکن است دارای پرچم هایی باشند که بر نحوه جستجو تأثیر بگذارد.
43
43
44
-
در جاوا اسکریپت، فقط 6 مورد از آنها وجود دارد:
44
+
در جاوا اسکریپت، تنها 6 مورد از آنها وجود دارد:
45
45
46
46
`pattern:i`
47
47
: با این پرچم، جستجو به حروف کوچک و بزرگ حساس نیست: تفاوتی بین `A` و `a` نمی گذارد (به مثال زیر مراجعه کنید).
@@ -53,7 +53,7 @@ let regexp = new RegExp(`<${tag}>`); // مانند /<h2>/ اگر در اعلان
53
53
: حالت چند خطی (در فصل <info:regexp-multiline-mode> پوشش داده شده است).
54
54
55
55
`pattern:s`
56
-
: حالت `dotall` را فعال میکند، که به یک نقطه `.:pattern` اجازه میدهد تا با کاراکتر خط جدید `n\` مطابقت داشته باشد (در فصل <info:regexp-character-classes> پوشش داده شده است).
56
+
: حالت `dotall` را فعال می کند، که به یک نقطه `.:pattern` اجازه می دهد تا با کاراکتر خط جدید `n\` مطابقت داشته باشد (در فصل <info:regexp-character-classes> پوشش داده شده است).
57
57
58
58
`pattern:u`
59
59
: پشتیبانی کامل از یونیکد را فعال می کند. پرچم پردازش صحیح جفت های جایگزین را امکان پذیر می کند. اطلاعات بیشتر در مورد آن در فصل <info:regexp-unicode>.
@@ -73,7 +73,7 @@ let regexp = new RegExp(`<${tag}>`); // مانند /<h2>/ اگر در اعلان
73
73
74
74
همانطور که قبلا ذکر شد، عبارات باقاعده با متدهای رشته ای ادغام می شوند.
75
75
76
-
متد `str.match(regexp)` همه مطابقت های `regexp` را در رشته `str` پیدا میکند.
76
+
متد `str.match(regexp)` همه مطابقت های `regexp` را در رشته `str` پیدا می کند.
77
77
78
78
و دارای 3 حالت کار است:
79
79
@@ -83,7 +83,7 @@ let regexp = new RegExp(`<${tag}>`); // مانند /<h2>/ اگر در اعلان
83
83
84
84
alert( str.match(/we/gi) ); // We,we (آرایه ای از 2 رشته که مطابقت دارند)
85
85
```
86
-
لطفاً توجه کنید که `match:We` و `match:we` نتیجه یکسانی میدهند، زیرا پرچم `pattern:i` باعث میشود که عبارت باقاعده به حروف بزرگ و کوچک حساس نباشد.
86
+
لطفاً توجه کنید که `match:We` و `match:we` نتیجه یکسانی می دهند، زیرا پرچم `pattern:i` باعث می شود که عبارت باقاعده به حروف بزرگ و کوچک حساس نباشد.
87
87
88
88
2. اگر چنین پرچمی وجود نداشته باشد، فقط اولین تطابق را در یک آرایه، با تطابق کامل در ایندکس `0` و برخی جزئیات اضافی در ویژگی ها بر می گرداند:
89
89
```js run
@@ -101,9 +101,9 @@ let regexp = new RegExp(`<${tag}>`); // مانند /<h2>/ اگر در اعلان
101
101
102
102
اگر بخشی از عبارت باقاعده در داخل پرانتز قرار بگیرد، ممکن است آرایه، ایندکس های دیگری در کنار ایندکس `0` نیز داشته باشد. ما آن را در فصل <info:regexp-groups> پوشش خواهیم داد.
103
103
104
-
3. و در نهایت، اگر هیچ تطابقی وجود نداشته باشد، `null` بر می گرداند. (فرقی نمیکند که پرچم `pattern:g` وجود داشته باشد یا خیر).
104
+
3. و در نهایت، اگر هیچ تطابقی وجود نداشته باشد، `null` بر می گرداند. (فرقی نمی کند که پرچم `pattern:g` وجود داشته باشد یا خیر).
105
105
106
-
این یک فرق ریز و بسیار مهم است. اگر هیچ تطابقی وجود نداشته باشد، یک آرایه خالی دریافت نمیکنیم، بلکه `null` دریافت می کنیم. فراموش کردن آن ممکن است منجر به خطاهایی شود، به عنوان مثال:
106
+
این یک فرق ریز و بسیار مهم است. اگر هیچ تطابقی وجود نداشته باشد، یک آرایه خالی دریافت نمی کنیم، بلکه `null` دریافت می کنیم. فراموش کردن آن ممکن است منجر به خطاهایی شود، به عنوان مثال:
107
107
108
108
```js run
109
109
let matches = "JavaScript".match(/HTML/); // = null
@@ -113,7 +113,7 @@ let regexp = new RegExp(`<${tag}>`); // مانند /<h2>/ اگر در اعلان
113
113
}
114
114
```
115
115
116
-
اگر میخواهیم نتیجه همواره یک آرایه باشد، می توانیم آن را به این صورت بنویسیم:
116
+
اگر می خواهیم نتیجه همواره به صورت یک آرایه باشد، می توانیم آن را به این صورت بنویسیم:
117
117
118
118
```js run
119
119
let matches = "JavaScript".match(/HTML/)*!* || []*/!*;
@@ -125,7 +125,7 @@ let regexp = new RegExp(`<${tag}>`); // مانند /<h2>/ اگر در اعلان
125
125
126
126
## جایگزین کردن:str.replace
127
127
128
-
روش `str.replace(regexp، replacement)` تطابق هایی را که با استفاده از `regexp` در رشته `str` یافت میشود را با `replacement` جایگزین میکند (همه منطبق هستند اگر پرچم `pattern:g` وجود داشته باشد، در غیر این صورت، فقط اولین مورد است).
128
+
روش `str.replace(regexp، replacement)` تطابق هایی را که با استفاده از `regexp` در رشته `str` یافت می شود را با `replacement` جایگزین می کند (همه منطبق هستند اگر پرچم `pattern:g` وجود داشته باشد، در غیر این صورت، فقط اولین مورد است).
129
129
130
130
برای مثال:
131
131
@@ -137,7 +137,7 @@ alert( "We will, we will".replace(/we/i, "I") ); // I will, we will
137
137
alert( "We will, we will".replace(/we/ig, "I") ); // I will, I will
138
138
```
139
139
140
-
آرگومان دوم رشته، `replacement(جایگزینی)` است. میتوانیم از ترکیب کاراکتر های ویژه در آن برای درج قطعاتی از تطابق استفاده کنیم:
140
+
آرگومان دوم رشته، `replacement(جایگزینی)` است. می توانیم از ترکیب کاراکتر های ویژه در آن برای درج قطعاتی از تطابق استفاده کنیم:
141
141
142
142
| نماد | عمل در رشته جایگزین |
143
143
|--------|--------|
@@ -156,7 +156,7 @@ alert( "I love HTML".replace(/HTML/, "$& and JavaScript") ); // I love HTML and
156
156
157
157
## تست کردن:regexp.test
158
158
159
-
متد `regexp.test(str)` حداقل یک تطابق را جستجو میکند، در صورت یافتن `true`، در غیر این صورت `false` بر میگرداند.
159
+
متد `regexp.test(str)` حداقل یک تطابق را جستجو می کند، در صورت یافتن `true`، در غیر این صورت `false` بر می گرداند.
160
160
161
161
```js run
162
162
let str = "I love JavaScript";
@@ -165,14 +165,14 @@ let regexp = /LOVE/i;
165
165
alert( regexp.test(str) ); // true
166
166
```
167
167
168
-
بعداً در این فصل، عبارات باقاعده بیشتری را یاد می گیریم. مثالهای بیشتری را مرور می کنیم، و همچنین با روش های دیگر آشنا می شویم.
168
+
بعدا در این فصل، عبارات باقاعده بیشتری را یاد می گیریم. مثال های بیشتری را مرور می کنیم و همچنین با روش های دیگری آشنا می شویم.
169
169
170
170
اطلاعات کامل در مورد متد ها در مقاله <info:regexp-methods> آورده شده است.
171
171
172
172
## خلاصه
173
173
174
-
- یک عبارت باقاعده از یک الگو و پرچمهای اختیاری تشکیل شده است:`pattern:g`، `pattern:i`، `pattern:m`، `pattern:u`، `pattern:s`، `pattern:y`.
174
+
- یک عبارت باقاعده از یک الگو و پرچم های اختیاری تشکیل شده است:`pattern:g`، `pattern:i`، `pattern:m`، `pattern:u`، `pattern:s`، `pattern:y`.
175
175
- بدون پرچم و نمادهای خاص (که بعداً مطالعه خواهیم کرد)، جستجو توسط regexp مانند جستجوی زیر رشته(substring) است.
176
-
- متد `str.match(regexp)` به دنبال تطابق است: اگر پرچم `pattern:g` وجود داشته باشد، همه آنها را بر میگرداند، در غیر این صورت، فقط اولین مورد را بر میگرداند.
177
-
- متد `str.replace(regexp، replacement)»` تطابق های یافت شده با استفاده از `regexp` را با `replacement` جایگزین میکند: به همه آنها این فرایند را اعمال میکند اگر پرچم `pattern:g` وجود داشته باشد، در غیر این صورت فقط به اولین مورد اعمال میکند.
178
-
- متد `regexp.test(str)` اگر حداقل یک مورد مطابقت داشته باشد، `true` بر میگرداند، در غیر این صورت، `false` بر میگرداند.
176
+
- متد `str.match(regexp)` به دنبال تطابق است: اگر پرچم `pattern:g` وجود داشته باشد، همه آنها را بر می گرداند، در غیر این صورت، فقط اولین مورد را بر می گرداند.
177
+
- متد `str.replace(regexp، replacement)»` تطابق های یافت شده با استفاده از `regexp` را با `replacement` جایگزین می کند: به همه آنها این فرایند را اعمال می کند اگر پرچم `pattern:g` وجود داشته باشد، در غیر این صورت فقط به اولین مورد اعمال می کند.
178
+
- متد `regexp.test(str)` اگر حداقل یک مورد مطابقت داشته باشد، `true` بر می گرداند، در غیر این صورت، `false` بر می گرداند.
0 commit comments