Ø§ÙØªØ¹Ø¨Ùرات Ø§ÙØ¹Ø§Ø¯ÙØ© Ù٠أÙ٠اط تÙÙØ± طرÙÙØ© ÙØ¹Ø§ÙØ© ÙÙØ¨ØØ« ÙØ§Ùاستبدا٠Ù٠اÙÙØµ.
Ù٠ا٠JavaScript, Ø£ÙÙØ§ تÙÙ٠٠تÙÙØ±Ø© عبر RegExp, ÙÙØ°ÙÙ ÙÙ ÙÙ Ø¯Ù Ø¬ÙØ§ Ù٠طر٠اÙÙØµÙص.
Ø§ÙØªØ¹Ø¨Ùرات اÙÙ ÙØªØ¸Ù Ø©
اÙÙØ¹Ø¨Ùر اÙÙ ÙØªØ¸Ù (ÙÙÙ Ù٠أختصار٠اÙÙ âregexpâ, ا٠âregâ) ÙØªÙÙÙ Ù Ù ÙÙ Ø· ÙØ£Ø¹ÙØ§Ù Ø£Ø®ØªÙØ§Ø±ÙØ©.
ÙÙØ§Ù ÙÙØ¹Ø§Ù Ù Ù Ø¨ÙØ§Ø¡ Ø§ÙØ¬Ù ÙØ© ÙÙ Ù٠استخدا٠Ù٠ا ÙØ¥Ùشاء ÙØ§Ø¦Ù ØªØ¹Ø¨ÙØ± Ù ÙØªØ¸Ù .
طرÙÙØ© اÙÙØªØ§Ø¨Ø© âØ§ÙØ·ÙÙÙØ©â:
regexp = new RegExp('ÙÙ
Ø·', 'Ø£Ø¹ÙØ§Ù
');
ÙØ·Ø±ÙÙØ© اÙÙØªØ§Ø¨Ø© âØ§ÙÙØµÙرةâ, بأستخدا٠â/â:
regexp = /ÙÙ
Ø·/; // بدÙÙ Ø£Ø¹ÙØ§Ù
regexp = /ÙÙ
Ø·/gim; // أستخداÙ
Ø§ÙØ§Ø¹ÙاÙ
g,m ÙØ§ÙعÙÙ
i (Ø³ÙØªÙ
ØªØºØ·ÙØªÙ ÙÙÙ
ا بعد)
ÙØ°Ø§ Ø§ÙØ±Ù ز â/â¦/â ÙØ¹Ø±Ù ا٠JavaScript Ø£ÙÙØ§ سÙÙØ´Ø¦ ØªØ¹Ø¨ÙØ± Ù ÙØªØ¸Ù . ÙÙÙ ÙØ°ÙÙ Ù Ø«Ù Ø¹ÙØ§Ù ات Ø§ÙØªÙØµÙØµ Ù٠اÙÙØµÙص.
ÙÙ Ø§ÙØØ§ÙØªÙÙ ÙØµØ¨Ø ا٠regexp ÙÙ
ÙØ°Ø¬ Ù
بÙÙ Ù
٠ا٠RegExp.
Ø§ÙØ£Ø®ØªÙØ§Ù Ø§ÙØ±Ø¦Ùس٠بÙÙ Ø§ÙØ·Ø±ÙÙØªÙ٠أ٠اÙÙÙ
Ø· بأستخداÙ
ا٠/.../ ÙØ§ ÙØ³Ù
Ø ÙÙ Ø¨ÙØªØ§Ø¨Ø© ØªØ¹Ø¨ÙØ±Ø§Øª بداخÙÙ (Ù
Ø«Ù Ø§ÙØªØ¹Ø¨Ùر ${...}). ÙÙ ÙØ°Ù Ø§ÙØØ§Ù٠تÙÙÙ Ø§ÙØ¬Ù
Ù٠ثابتة.
Slashes are used when we know the regular expression at the code writing time â and thatâs the most common situation. While new RegExp is more often used when we need to create a regexp âon the flyâ from a dynamically generated string. For instance:
let tag = prompt('Ù
ا Ø§ÙØ¹ÙاÙ
Ø© Ø§ÙØªÙ ØªØ±ÙØ¯ Ø§ÙØ¹Ø«Ùر عÙÙÙØ§Ø', 'h2');
let regexp = new RegExp(`<${tag}>`); // Ù
ث٠/<h2>/ أذا Ø£ÙØ¬Ùب "h2" ÙÙ prompt Ø£Ø¹ÙØ§Ù
Ø§ÙØ£Ø¹ÙاÙ
Ø§ÙØªØ¹Ø¨Ùرات اÙÙ ÙØªØ¸Ù Ø© رب٠ا ØªØØªÙ٠عÙÙ Ø£Ø¹ÙØ§Ù تؤثر ÙÙ Ø§ÙØ¨ØØ«.
ÙÙØ§Ù ÙÙØ· 6 Ù ÙÙÙ Ù٠ا٠JavaScript:
i- Ø¹ÙØ¯ أستخداÙ
ÙØ°Ø§ Ø§ÙØ¹ÙÙ
. Ø§ÙØ¨ØØ« ÙØ§ ÙÙØªÙ
Ø¨ØØ§ÙØ© Ø§ÙØ§ØØ±Ù. ÙÙØ§ Ø£Ø®ØªÙØ§Ù بÙ٠اÙ
AÙØ§Ùa(Ø£ÙØ¸Ø± ÙÙÙ Ø«Ø§Ù Ø¨Ø§ÙØ£Ø³ÙÙ). g- Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ°Ù Ø§ÙØ¹Ùا٠ة Ø ÙØ¨ØØ« Ø§ÙØ¨ØØ« Ø¹Ù Ø¬Ù ÙØ¹ Ø§ÙØªØ·Ø§Ø¨Ùات Ø Ø¨Ø¯ÙÙÙØ§ â ÙØªÙ إرجاع اÙÙ Ø·Ø§Ø¨ÙØ© Ø§ÙØ£ÙÙÙ ÙÙØ·
m- ÙØ¶Ø¹ ٠تعدد Ø§ÙØ§Ø³Ø·Ø± (ØªÙ ØªØºØ·ÙØªÙا Ù٠اÙÙØµÙ Multiline mode of anchors ^ $, flag "m").
s- ÙÙ
ÙÙÙØ§ ÙØ¶Ø¹ ا٠âdotallâ, ÙØ³Ù
Ø Ø§ÙÙÙØ·Ø©
.ÙÙ Ø·Ø§Ø¨ÙØ© Ø§ÙØ³Ø·Ø± Ø§ÙØ¬Ø¯Ùد\n(ØªÙ ØªØºØ·ÙØªÙ Ù٠اÙÙØµÙ ÙØ¦Ø§Øª Ø§ÙØ£ØØ±Ù). u- Enables full Unicode support. The flag enables correct processing of surrogate pairs. More about that in the chapter Unicode: flag "u" and class \p{...}.
y- ÙØ¶Ø¹ ا٠âStickyâ: ÙØ¨ØØ« ع٠اÙÙ ÙØ¶Ø¹ Ù٠اÙÙØµ (ØªÙ ØªØºØ·ÙØªÙا Ù٠اÙÙØµÙ عÙ٠ثابت "y" Ø Ø§ÙØ¨ØØ« Ù٠اÙÙ ÙØ¶Ø¹)
Ù Ù ÙÙØ§ ÙÙ ÙØ¸Ø§Ù Ø§ÙØ£ÙÙØ§Ù:
- Ø§ÙØªØ¹Ø¨Ùر اÙÙ
ÙØªØ¸Ù
â
red - اÙÙØµ (ØÙØ« ÙØ¨ØØ«) â
blue - اÙÙØªÙجة â
green
Ø§ÙØ¨ØØ« بأستخدا٠: str.match
Ù٠ا Ø°ÙØ±Ùا سابÙÙØ§ Ø ÙØªÙ د٠ج Ø§ÙØªØ¹Ø¨Ùرات اÙÙ ÙØªØ¸Ù Ø© ٠ع ÙØ¸Ø§Ø¦Ù اÙÙØµ.
اÙÙØ¸ÙÙØ© str.match(regexp) تجد ÙÙ Ù
ا ÙØØªÙ٠عÙÙ regexp Ù٠اÙÙØµ str.
ÙØ¯ÙÙØ§ 3 طر٠ع٠Ù:
-
أذا ÙØ§Ù Ø§ÙØªØ¹Ø¨Ùر اÙÙ ÙØªØ¸Ù ÙØØªÙ٠عÙÙ Ø§ÙØ¹ÙÙ
g, تÙÙ٠بإرجاع Ù Ø¬Ù ÙØ¹Ø© Ù Ù ÙØ§ÙØ© Ø§ÙØªØ·Ø§Ø¨Ùات:let str = 'We will, we will rock you'; alert(str.match(/we/gi)); // We,we (٠صÙÙÙØ© Ù Ù ÙØµÙ٠٠تطابÙÙÙ)Ù Ù ÙØ¶ÙÙ Ø§ÙØªØ¨Ù ا٠ÙÙØ§ ٠٠اÙ
WeÙØ§ÙweØªÙ Ø£ÙØ¬Ø§Ø¯ÙÙ , ÙØ§Ù Ø§ÙØ¹ÙÙiÙØ¬Ø¹Ù Ø§ÙØªØ¹Ø¨Ùر اÙÙ ÙØªØ¸Ù ÙØ§ ÙÙØªÙ Ø¨ØØ§ÙØ© Ø§ÙØ§ØØ±Ù. -
إذا ÙÙ ÙÙÙ ÙÙØ§Ù Ù Ø«Ù ÙØ°Ø§ Ø§ÙØ¹ÙÙ Ø ÙØ¥ÙÙ ÙÙØ±Ø¬Ø¹ اÙÙ Ø·Ø§Ø¨ÙØ© Ø§ÙØ£ÙÙÙ ÙÙØ· ÙÙ Ø´Ù٠٠صÙÙÙØ© Ø Ù Ø¹ اÙÙ Ø·Ø§Ø¨ÙØ© اÙÙØ§Ù ÙØ© Ù٠اÙÙÙØ±Ø³
0ÙØ¨Ø¹Ø¶ Ø§ÙØªÙاصÙÙ Ø§ÙØ¥Ø¶Ø§ÙÙØ© ÙÙ Ø§ÙØ®ØµØ§Ø¦Øµ:let str = 'We will, we will rock you'; let result = str.match(/we/i); // بدÙÙ Ø§ÙØ¹ÙÙ g alert(result[0]); // We (اÙÙ ØªØ·Ø§Ø¨ÙØ© Ø§ÙØ§ÙÙÙ) alert(result.length); // 1 // Ø§Ø§ÙØªÙاصÙÙ: alert(result.index); // 0 (Ù ÙØ¶Ø¹ Ø§ÙØ¬Ø²Ø¡ Ø§ÙØ°Ù ØªÙ Ø§ÙØ¨ØØ« عÙÙ) alert(result.input); // We will, we will rock you (اÙÙØµ)ÙØ¯ ØªØØªÙ٠اÙ٠صÙÙÙØ© عÙÙ ÙÙØ§Ø±Ø³ Ø£Ø®Ø±Ù Ø Ø¥ÙÙ Ø¬Ø§ÙØ¨
0إذا ت٠تض٠Ù٠جزء Ù Ù Ø§ÙØªØ¹Ø¨Ùر اÙÙ ÙØªØ¸Ù بÙÙ ÙÙØ³ÙÙ. Ø³ÙØªÙاÙ٠ذÙÙ Ù٠اÙÙØµÙ Ø§ÙØªÙاط اÙÙ Ø¬Ù ÙØ¹Ø§Øª. -
ÙØ£Ø®ÙراÙ, أذا ÙØ§Ù ÙÙØ§Ù ÙÙØ§ Ù ØªØ·Ø§Ø¨ÙØ©, ÙØ£Ù اÙÙØ§ØªØ¬ ÙÙÙÙ
null(ÙØ§ ÙÙ٠أذا ÙØ§Ù ÙÙØ¬Ø¯ Ø§ÙØ¹ÙÙgØ§Ù ÙØ§ ÙÙØ¬Ø¯).ÙØ°Ø§ ÙØ§Ø±Ù Ø¨Ø³ÙØ· Ù ÙÙ ÙÙØºØ§ÙØ©. إذا Ù٠تÙÙ ÙÙØ§Ù ØªØ·Ø§Ø¨ÙØ§Øª Ø ÙÙÙ ÙØªÙÙ٠٠صÙÙÙØ© ÙØ§Ø±ØºØ© Ø ÙÙÙÙ Ø¨Ø¯ÙØ§Ù ٠٠ذÙÙ ÙØªÙÙÙ
null. ÙØ¯ ÙØ¤Ø¯Ù ÙØ³Ùا٠ذÙ٠إÙÙ ØØ¯ÙØ« أخطاء Ø Ø¹Ù٠سبÙ٠اÙ٠ثاÙ:let matches = 'JavaScript'.match(/HTML/); // = null if (!matches.length) { // خطأ: ÙØ§ ÙÙ ÙÙ ÙØ±Ø§Ø¡Ø© Ø§ÙØ®Ø§ØµÙØ© 'length' ÙØ¯Ù null alert('خطأ ÙÙ Ø§ÙØ³Ø·Ø± Ø§ÙØ£Ø¹ÙÙ'); }إذا Ø£Ø±Ø¯ÙØ§ أ٠تÙÙ٠اÙÙØªÙجة Ø¯Ø§Ø¦Ù ÙØ§ ٠صÙÙÙØ© Ø ÙÙÙ ÙÙÙØ§ ÙØªØ§Ø¨ØªÙا Ø¨ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ©:
let matches = "JavaScript".match(/HTML/) || []; if (!matches.length) { alert("ÙØ§ Ù ØªØ·Ø§Ø¨ÙØ§Øª"); // Ø§ÙØ£Ù Ø£ÙÙØ§ تع٠٠}
Ø§ÙØ£Ø³ØªØ¨Ø¯Ø§Ù: str.replace
اÙÙØ¸ÙÙØ© str.replace(regexp, replacement) تستبد٠اÙÙ
ØªØ·Ø§Ø¨ÙØ§Øª Ø§ÙØªÙ ÙØªÙ
Ø£ÙØ¬Ø§Ø¯Ùا بأستخداÙ
ا٠regexp Ù٠اÙÙØµ str Ù
ع ÙÙÙ
Ø© replacement (Ù٠اÙÙ
ØªØ·Ø§Ø¨ÙØ§Øª ÙØªÙ
أستبداÙÙØ§ أذا ÙØ§Ù ÙÙØ§ÙÙ Ø§ÙØ¹ÙÙ
g, ØºÙØ± ذÙÙ, ÙØªÙ
أستبدا٠اÙÙ
ØªØ·Ø§Ø¨ÙØ© Ø§ÙØ§ÙÙÙ ÙÙØ·).
عÙ٠سبÙ٠اÙ٠ثاÙ:
// بدÙÙ Ø§ÙØ¹ÙÙ
g
alert('We will, we will'.replace(/we/i, 'I')); // I will, we will
// Ù
ع أستخداÙ
Ø§ÙØ¹ÙÙ
g
alert('We will, we will'.replace(/we/gi, 'I')); // I will, I will
Ø§ÙØ¹Ùصر Ø§ÙØ«Ø§ÙÙ ÙÙÙ٠اÙÙØµ replacement. ÙÙ
ÙÙÙØ§ استخداÙ
ترÙÙØ¨Ø§Øª Ø£ØØ±Ù خاصة ÙØ¥Ø¯Ø±Ø§Ø¬ أجزاء Ù
٠اÙÙ
ØªØ·Ø§Ø¨ÙØ©:
| Ø§ÙØ±Ù ÙØ² | Ø§ÙØ§Ø¬Ø±Ø§Ø¡ ÙÙ ÙØµ Ø§ÙØ£Ø³ØªØ¨Ø¯Ø§Ù |
|---|---|
$& |
إدراج اÙÙ ØªØ·Ø§Ø¨ÙØ© ÙØ§Ù ÙØ© |
$` |
أدراج جزء ٠٠اÙÙØµ ÙØ¨Ù اÙÙ ØªØ·Ø§Ø¨ÙØ© |
$' |
أدراج جزء ٠٠اÙÙØµ بعد اÙÙ ØªØ·Ø§Ø¨ÙØ© |
$n |
أذا n تÙÙ٠رÙÙ
ا٠رÙÙ
ÙÙ, Ø«Ù
ÙØ¯Ø±Ø¬ Ù
ØØªÙÙØ§Øª Ø§ÙØ£ÙÙØ§Ø³ رÙÙ
n Ø Ø§ÙÙ
Ø²ÙØ¯ عÙÙØ§ Ù٠اÙÙØµÙ Ø§ÙØªÙاط اÙÙ
جÙ
ÙØ¹Ø§Øª |
$<name> |
ÙØ¯Ø±Ø¬ Ù ØØªÙÙØ§Øª Ø§ÙØ£ÙÙØ§Ø³ ٠ع âØ§ÙØ§Ø³Ù â Ø§ÙÙ ØØ¯Ø¯ Ø Ø§ÙÙ Ø²ÙØ¯ عÙÙ Ù٠اÙÙØµÙ Ø§ÙØªÙاط اÙÙ Ø¬Ù ÙØ¹Ø§Øª |
$$ |
أدراج ØØ±Ù $ |
Ù
ثا٠عÙÙ $&:
alert('Ø£ÙØ§ Ø£ØØ¨ HTML'.replace(/HTML/, '$& and JavaScript')); // Ø£ÙØ§ Ø£ØØ¨ HTML and JavaScript
Ø§ÙØ£Ø®ØªØ¨Ø§Ø±: regexp.test
اÙÙØ¸ÙÙØ© regexp.test(str) ÙØ¨ØØ« Ø¹Ù ØªØ·Ø§Ø¨Ù ÙØ§ØØ¯ عÙÙ Ø§ÙØ£ÙÙ, أذا ÙÙØ¬Ø¯, ÙÙÙ٠اÙÙØ§ØªØ¬ Ø§Ù Ø§ÙØ¹Ø§Ø¦Ø¯ true, ØºÙØ± ذÙÙ false.
let str = 'Ø£ÙØ§ Ø£ØØ¨ JavaScript';
let regexp = /Ø£ØØ¨/i;
alert(regexp.test(str)); // true
ÙØ§ØÙÙØ§ ÙÙ ÙØ°Ø§ اÙÙØµÙ Ø Ø³ÙØ¯Ø±Ø³ ØªØ¹Ø¨ÙØ±Ø§Øª Ø£ÙØ«Ø± Ø§ÙØªØ¸Ø§Ù ÙØ§ Ø ÙØ³Ùتعر٠عÙ٠اÙÙ Ø²ÙØ¯ Ù Ù Ø§ÙØ£Ù Ø«ÙØ© Ø ÙÙÙØªÙÙ Ø£ÙØ¶Ùا بطر٠أخرÙ.
ÙØªÙ تÙÙÙØ± ٠عÙÙ٠ات ÙØ§Ù ÙØ© Ø¹Ù Ø§ÙØ£Ø³Ø§ÙÙØ¨ Ù٠اÙÙ ÙØ§ÙØ© .
اÙÙ ÙØ®Øµ
- ÙØªÙÙÙ Ø§ÙØªØ¹Ø¨Ùر اÙÙ
ÙØªØ¸Ù
Ù
Ù ÙÙ
Ø· ÙØ£Ø¹ÙاÙ
Ø§Ø®ØªÙØ§Ø±ÙØ©:
g,i,m,u,s,y. - بدÙÙ Ø£Ø¹ÙØ§Ù Ø§Ù Ø±Ù ÙØ² خاصة (ذÙ٠سÙÙ ÙØ¯Ø±Ø³Ù ÙØ§ØÙاÙ), Ø§ÙØ¨ØØ« ع٠طرÙÙ regexp ÙÙ ÙÙØ³Ù Ø§ÙØ¨ØØ« Ø¹Ù Ø³ÙØ³ÙØ© ÙØ±Ø¹ÙØ©.
- اÙÙØ¸ÙÙØ©
str.match(regexp)ÙØ¨ØØ« ع٠اÙÙ ØªØ·Ø§Ø¨ÙØ§Øª: ÙÙÙØ§ Ø¥Ù ÙØ¬Ø¯ØªgعÙÙ , ØºÙØ± ذÙÙ, ÙÙØ· اÙÙ ØªØ·Ø§Ø¨ÙØ© Ø§ÙØ§ÙÙÙ. - اÙÙØ¸ÙÙØ©
str.replace(regexp, replacement)تستبد٠اÙÙ ØªØ·Ø§Ø¨ÙØ§Øª Ø§ÙØªÙ ØªÙØ¬Ø¯ بأستخداÙregexp٠عreplacement: ÙÙÙÙ Ø£Ù ØªÙ Ø£ÙØ¬Ø§Ø¯ÙÙgعÙÙ , ØºÙØ± ذÙÙ Ø§ÙØ§ÙÙÙ ÙÙØ·. - اÙÙØ¸ÙÙØ©
regexp.test(str)ØªÙØ¹Ùد ÙÙØ§trueأذا ÙØ§Ù ÙÙØ§Ù عÙÙ Ø§ÙØ§ÙÙ Ù ØªØ·Ø§Ø¨ÙØ© ÙØ§ØØ¯Ø©, ØºÙØ± ذÙÙ, ØªÙØ¹Ùد ÙÙØ§false.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)