English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مقال عن RegExp في JavaScript

مقدمة

يخلق بناءRegExp تعبير نمطيًا يطابق النص.

للتعرف على التعريفات النمطية، يرجى قراءة فصل التعريفات النمطية في دليل JavaScript.

القواعد

النصوص والرموز الممكنة:
/pattern/flags new RegExp(pattern [, flags])

المتغيرات

pattern
نص التعبير النمطي
flags
إذا تم تحديد، يمكن أن يكون الحرف المعين مزيجًا من القيم التالية:

g
تطابق كامل
i
تجاهل الحروف الكبيرة والصغيرة
m
على عدة أسطر; تجعل الحروف الأولى والاخيرة (^ و $) تعمل في نمط على عدة أسطر (على سبيل المثال، ^ و $ يمكن أن يطابق بداية وإنهاء كل سطر من النص (السطور مقسومة بواسطة \n أو \r)، وليس فقط بداية وإنهاء النص بأكمله).
u
Unicode. اعتبار النمط كسلسلة من أرقام النقاط (code points).
y
الزهم; في النص المستهدف، يبدأ التطابق من الموضع المحدد من قبل خاصية lastIndex للتعبيرات النمطية (وليس يحاول التطابق من أي مكان بعد ذلك).
Description
There are two ways to create a regular expression object: literals and constructors. To represent a string, the literal form does not use quotes, and the parameters passed to the constructor use quotes. The following expressions create the same regular expression:

/ab+c/i;
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');

When the expression is assigned, the literal form provides the compilation state of the regular expression, and it is used when the regular expression remains constant. For example, when you use a literal to construct a regular expression in a loop, the regular expression will not be recompiled (recompiled) in each iteration.
The constructor of regular expression objects, such as new RegExp('ab+c'), provides runtime compilation of regular expressions. If you know that the regular expression pattern will change, or you do not know what pattern it will be, but obtain it from another source, such as user input, these situations can all be used with the constructor.
Starting from ECMAScript 6, when the first parameter is a regular expression and the second flag parameter exists, new RegExp(/ab+c/, 'i') no longer throws a TypeError ("Not supported when constructing from other regular expressions") exception, instead, a new regular expression is created using these parameters.

When creating a regular expression object using the constructor, you need to follow the conventional character escaping rules (add a backslash \ before). For example, the following are equivalent:

var re = new RegExp("\\w+");
var re = /\w+/;

Define regular expressions using literals
var expression = /pattern/ flags;
The pattern part can be any simple or complex regular expression
flage indicates the behavior of regular expression 1.g: global mode, does not stop after finding the first match 2.i: case insensitive mode 3.m: multi-line mode
مثال:

var pattern1 = /at/g; //matches all 'at' in the string
var pattern2 = /[bc]at/i; //matches 'bat' or 'cat', case insensitive
var pattern3 = /.at/gi; //matches three characters ending with '.at', case insensitive

All the metacharacters used in the pattern must be escaped. The metacharacters in regular expressions include:([{\^$|?*+.}])
مثال:

var pattern4 = /\[bc\]at/i; //matches the first '[bc]at', case insensitive

استخدام بناء RegExp، يقبل 2 متغيرات، متغير 1: النمط الذي يتم تطبيقه، متغير 2: علامات الإشارة الخيارية
مثال:

var pattern5 = new RegExp("[bc]at", "i");

ملاحظة: لأن متغير RegExp للمبنى هي نصوص، لذا في بعض الحالات يجب إعادة التشغيل النصوص مرة أخرى. يجب إعادة تشغيل جميع العناصر النمطية مرة أخرى

مثال:
النصوص المباشرة        النصوص المماثلة
/\[bc\]at/      "\\[bc\\]at"
/\.at/        "\\.at"
/name/\age/    "name\\/age"
/\d.\d{1,2}/    "\\d.\\d{1,2}"
/\w\\hello\\123/ "\\w\\\\hello\\\\123"

ملاحظة: إن إنشاء RegExp باستخدام النصوص المباشرة والإنشاء باستخدام بناء RegExp مختلف، دائمًا ما يتم مشاركة نفس مثيل RegExp من خلال النصوص المباشرة (ECMAScript3). كلRegExp الجديدة المبنية باستخدام بناء RegExp هي مثيل جديد.

خصائص RegExp المثبتة

console.log(pattern5.global); //false هل تم تعيين علامة g
console.log(pattern5.ignoreCase); //true هل تم تعيين علامة i
console.log(pattern5.multiline); //false هل تم تعيين علامة m
console.log(pattern5.lastIndex); //0 موقع البداية للبحث عن التطابق التالي
console.log(pattern5.source); //[bc]at تمثيل نصي لعبارة النمط العادية

الخصائص الموروثة

console.log(pattern5.toString()); // /[bc]at/i تمثيل نصي لعبارة النمط العادية
console.log(pattern5.toLocaleString()); // /[bc]at/i تمثيل نصي لعبارة النمط العادية
console.log(pattern5.valueOf()); // /[bc]at/i تمثيل نصي لعبارة النمط العادية

methods RegExp المثبتة
طريقة واحدة: exec()،تقبل متغيرًا واحدًا، وهو سلسلة النمط التطبيقية. يعود بمدى يحتوي على معلومات عن التطابق الأولي، وبدون ذلك يعود null، ويحتوي على عناصر مدى تحتوي على الخصائص index (موقع التطابق في السلسلة) وinput (السلسلة التي تطبق عليها النمط).

var text = "huang jin liang shi ge hao ren";
var pattern6 = new RegExp("huang( jin liAng( shi ge hao ren)?)?", "i");
var matches = pattern6.exec(text);
console.log(matches); 
//[ 'huang jin liang shi ge hao ren',
// ' jin liang shi ge hao ren',
// ' shi ge hao ren',
// index: 0,
// input: 'huang jin liang shi ge hao ren' ]
var text1 = "cat, bat, sat";
var pattern7 = new RegExp(".at")
var matches1 = pattern7.exec(text1);
console.log(matches1); //cat
var pattern8 = new RegExp(".at", "gm");
var matches2 = pattern8.exec(text1);
console.log(matches2); //cat
var matches3 = pattern8.exec(text1);
console.log(matches3); //bat
var matches4 = pattern8.exec(text1);
console.log(matches4); //sat
var matches5 = pattern8.exec(text1);
console.log(matches5); //null

الطريقة الثانية: test()،تقبل متغيرًا واحدًا، وهو تطبيق سلسلة النمط. إذا كانت السلسلة تتطابق مع هذا المعامل، فإنه يعود صحيحًا، وإلا يعود خطأ

var text2 = "000-00-0000";
var pattern9 = new RegExp("\\d{3}-\\d{2}-\\d{4}");
console.log(pattern9.test(text2))
console.log(text2);}}
if (pattern9.test(text2)) {
console.log("نجح في التطابق");
}
console.log("فشل في التطابق");
}

خصائص المصنوعات (لا تدعمها بعض المتصفحات)
الاسم الطويل لخصائص    الاسم القصير لخصائص    الشرح
input $_ النص الأخير الذي سيتم تطبيقه
lastMatch $& آخر تطابق
lastParen $+ آخر مجموعة التقاطع
leftContext $` النص المتبقي قبل lastMatch في input
multiline $* بولي،هل هو نمط متعدد الأسطر
rightContext $' النص المتبقي بعد lastMatch في input
        $1~$9 تستخدم لتحديد المجموعات التقاطعية

في محدودية ECMAScript
1. الأكوام والنهايات في النصوص الم匹配ة
2. البحث إلى الأمام
3. مجموعات الاتجاهين والمقاطع
4. مجموعات الذرات
5. دعم Unicode (باستثناء الأحرف الواحدة)
6. مجموعات التطابق المسماة
7. نمط التطابق s و x
8. التطابق المشروط
9. التعليقات في التعبيرات العادية

وجدت طريقة جديدة لمطابقة عدة أسطر في js

<script>
var s = "Please yes\nmake my day!";
alert(s.match(/yes.*day/));
//يعود null
alert(s.match(/yes[^]*day/));
//يعود 'yes\nmake my day'
</script>

للأسف،editplus غير قادر على الاستخدام،غالبًا ما يكون dw أكثر راحة.

أنت قد تحب