🔤 فئات الأحرف في JavaScript: مفتاح البحث الذكي في النصوص!
في دروسنا السابقة، تعلمنا أساسيات التعبيرات النمطية (RegExp) وكيفية البحث عن نص محدد. لكن ماذا لو أردنا البحث عن نوع من الأحرف وليس حرفاً محدداً؟ مثلاً، البحث عن أي رقم، أو أي حرف كبير، أو أي مسافة؟ هنا يأتي دور فئات الأحرف (Character Classes)، وهي أداة قوية تجعل تعبيراتك النمطية أكثر ذكاءً ومرونة.
🤔 ما هي فئات الأحرف (Character Classes)؟
تخيل أنك تريد البحث عن "رقم" في نص ما. بدلاً من كتابة /[0 أو 1 أو 2 أو 3... أو 9]/، يمكنك ببساطة استخدام فئة أحرف تمثل جميع الأرقام. فئة الأحرف هي مجموعة من الرموز الموضوعة بين قوسين معقوفين [...]، تخبر محرك البحث النمطي: "ابحث عن أي حرف من هذه المجموعة".
هناك نوعان رئيسيان:
- الفئات الأساسية المحددة مسبقاً (Predefined Character Classes): مثل
\dللأرقام. - الفئات المخصصة (Custom Character Classes): التي تصنعها أنت، مثل
[aeiou]للبحث عن حرف علة.
📚 الفئات الأساسية المحددة مسبقاً
هذه فئات شائعة الاستخدام، تمثل أنواعاً معينة من الأحرف. كتابتها أسرع وأوضح.
| الفئة | الوصف | المكافئ التقريبي |
|---|---|---|
. (نقطة) |
تطابق أي حرف واحد باستثناء سطر جديد. | — |
\d |
تطابق أي رقم (digit) من 0 إلى 9. | [0-9] |
\D |
تطابق أي حرف ليس رقماً (نفي \d). |
[^0-9] |
\w |
تطابق أي حرف كلمة (word character): حرف (a-z, A-Z)، رقم (0-9)، أو الشرطة السفلية _. |
[A-Za-z0-9_] |
\W |
تطابق أي حرف ليس من حروف الكلمة (نفي \w). |
[^A-Za-z0-9_] |
\s |
تطابق أي مسافة بيضاء (whitespace): مسافة، تبويب (\t)، سطر جديد (\n)، إلخ. |
[ \t\n\r\f\v] |
\S |
تطابق أي حرف ليس مسافة بيضاء (نفي \s). |
[^ \t\n\r\f\v] |
مثال عملي: لنبحث عن أول رقم في جملة.
// مثال 1: البحث عن أول رقم باستخدام \d
let text = "رجاءً اتصل بالرقم 123-456-7890";
let regexPattern = /\d/; // ابحث عن أول رقم
let result = text.match(regexPattern);
console.log(result); // المخرجات: ['1', index: 15, ...]
// لاحظ أنها وجدت الرقم "1" فقط (أول تطابق).
// مثال 2: البحث عن تسلسل أرقام باستخدام \d مع المُحدد +
let text = "سعر المنتج هو 1500 ريال.";
let regexPattern = /\d+/; // ابحث عن تسلسل من رقم واحد أو أكثر
let result = text.match(regexPattern);
console.log(result[0]); // المخرجات: "1500"
🛠️ بناء فئات أحرف مخصصة
ماذا لو أردت البحث عن أحرف معينة ليست موجودة في الفئات الأساسية؟ يمكنك صنع فئتك الخاصة!
[abc]: تطابق أي حرف من المجموعة:aأوbأوc.[a-z]: تطابق أي حرف صغير منaإلىz. (نطاق)[A-Z]: تطابق أي حرف كبير منAإلىZ.[0-9]: تطابق أي رقم من0إلى9(مثل\d).[a-zA-Z]: تطابق أي حرف، كبيراً كان أم صغيراً.
مثال: لنبحث عن حرف علة (a, e, i, o, u) في كلمة.
// مثال 3: البحث عن حرف علة باستخدام فئة مخصصة
let word = "JavaScript";
let regexPattern = /[aeiou]/gi; // ابحث عن أي حرف علة (بغض النظر عن الحالة)
let result = word.match(regexPattern);
console.log(result); // المخرجات: ['a', 'a', 'i']
// وجدت الأحرف 'a' في الموضعين 1 و 3، و 'i' في الموضع 7.
🚫 نفي فئة الأحرف (Negated Character Classes)
ماذا لو أردت العكس؟ أن تطابق أي حرف عدا مجموعة محددة؟ هنا نستخدم علامة الإقحام ^ كأول حرف داخل الأقواس المعقوفة.
[^abc]: تطابق أي حرف ما عداaأوbأوc.[^0-9]: تطابق أي حرف ليس رقماً (مثل\D).
مثال: لنستخرج كل شيء في جملة ما عدا الأرقام.
// مثال 4: استبعاد الأرقام من نص
let text = "المستخدم: JohnDoe123، الرصيد: 500";
let regexPattern = /[^0-9]+/g; // ابحث عن تسلسل من حرف واحد أو أكثر ليس رقماً
let result = text.match(regexPattern);
console.log(result);
// المخرجات: ['المستخدم: JohnDoe', '، الرصيد: ']
// لاحظ كيف فصل النص واستبعد الأرقام '123' و '500'.
💡 الخلاصة والتطبيق
تذكر هذه النقاط الأساسية:
- الفئات الأساسية مثل
\dو\wو.هي اختصارات توفر الوقت. - الفئات المخصصة
[...]تمنحك تحكماً كاملاً في مجموعة الأحرف التي تبحث عنها. - النفي
[^...]هو أداة قوية للاستبعاد. - يمكنك دمجها مع المُحددات (Quantifiers) مثل
+أو*التي تعلمناها سابقاً للبحث عن تسلسلات.
تحدي سريع: حاول كتابة تعبير نمطي يجد أول حرف كبير في السلسلة النصية "hello World". (تلميح: استخدم فئة مخصصة للنطاق A-Z).
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال