الكلمات السابقة
تم تقديم بناء الجملة الأساسي للتعبيرات العادية في JavaScript في وقت سابق. تمثل فئة regexp من JavaScript تعبيرات منتظمة. كل من السلسلة و regexp تحديد الطرق. يمكن أن يؤدي استخدام التعبيرات العادية إلى إجراء مطابقة للأنماط قوية واسترجاع النص واستبداله. ستقدم هذه المقالة كائنات regexp من التعبيرات العادية ، والتعبيرات العادية المعنية
سمات وطرق
هدف
يتم تمثيل التعبيرات المنتظمة في JavaScript بواسطة كائنات RegexP ، وهناك طريقتان لكتابتها: أحدهما الطريقة الحرفية ؛ والآخر هو طريقة المنشئ
طريقة كتابة بيرل
الكتابة الحرفية التعبير المنتظم ، والمعروفة أيضًا باسم كتابة بيرل ، لأن خصائص التعبير العادية لجافا سكريبت مستعارة من بيرل
يتم تعريف حرفيات التعبير العادية على أنها أحرف موجودة بين زوج من القطع (/) و 3 أعلام يمكن تعيينها
var expression = /pattern /flags ؛
يدعم نمط المطابقة للتعبيرات العادية العلامات الثلاثة التالية:
G: يعني النمط العالمي ، أي أن النمط سيتم تطبيقه على جميع الأوتار ، بدلاً من التوقف على الفور عند العثور على المباراة الأولى
I: يشير إلى وضع غير حساس للحالة ، أي أن حالة النمط والسلسلة يتم تجاهلها عند تحديد المطابقة.
M: يمثل نمطًا متعدد الأسلحة ، أي عندما يتم الوصول إلى نهاية خط من النص ، فسوف تستمر في البحث عما إذا كان هناك عنصر يطابق النمط في السطر التالي.
// تطابق جميع مثيلات "at" من سلسلة var p =/at/g ؛ // test () طريقة إرجاع قيمة منطقية للإشارة إلى ما إذا كان يمكن العثور على المطابقة console.log (p.test ('ata')) ؛ // trueconsole.log (p.test ('aba')) ؛مُنشئ regexp
مثل الكائنات المدمجة العادية ، تدعم كائنات التعبير العادية REGEXP أيضًا شكل مُنشئ جديد+regexp ().
يتلقى مُنشئ REGEXP معلمتين: نمط السلسلة للمطابقة وسلسلة العلم الاختيارية (أعلام). الأعلام الثلاثة لسلسلة العلم والحرفية لها نفس المعنى: "G" ، "أنا" ، "م"
كلا المعلمات من مُنشئ regexp هي سلاسل. وأي تعبير محدد باستخدام النموذج الحرفي يمكن أن يستخدم المنشآت
// تطابق جميع مثيلات "at" من سلسلة var p1 =/at/g ؛ // كما هو مذكور أعلاه var p2 = new regexp ('at' ، 'g') ؛[ملاحظة] تنص مواصفات ECMASCRIPT3 على أنه سيتم تحويل كمية مباشرة تعبير مباشر إلى كائن RegexP عند تنفيذها. كل عملية للتعبير العادي الكمية المباشرة التي تمثلها نفس الرمز إرجاع نفس الكائن. تقوم مواصفات ECMASCRIPT5 بإعداد الأحكام المعاكسة ، ويتم حساب التعبير العادي الذي يمثله نفس الرمز مباشرة في كل مرة.
جميع العمليات تعيد كائنات جديدة. تم تنفيذ IE6-8 دائمًا وفقًا لمواصفات ECMASCRIPT5 ، لذلك لا توجد مشكلة توافق
نظرًا لأن حرفي التعبيرات العادية لا تدعم المتغيرات ، إذا ظهرت المتغيرات في التعبيرات العادية ، يمكنك فقط استخدام مُنشئ RegexP لربط المتغيرات في معلمات مُنشئ REGEXP كربط سلسلة.
【نصائح】 احصل على عنصر من خلال اسم الفصل
وظيفة getByClass (OBJ ، className) {var elements = obj.getElementsByTagName ('*') ؛ var result = [] ؛ var pattern = new regexp ('(^| // s)' + className + '(// s | $)') ؛ لـ (var i = 0 ؛ i <elements.length ؛ i ++) {if (pattern.test (elements [i] .className)) {result.push (elements [i]) ؛ }} نتيجة الإرجاع ؛}خصائص مثيل
يحتوي كل كائن مثيل REGEXP على الخصائص الخمس التالية
Global: تشير القيمة المنطقية إلى ما إذا كانت قيمة العلم G: القيمة المنطقية تشير إلى ما إذا كانت العلم I LastIndex: يشير Integer إلى موضع الحرف في البدء في البحث عن المباراة التالية. يتم إحصاءها من 0 multiline: القيمة المنطقية تشير إلى ما إذا كان العلم msource: تمثيل السلسلة للتعبير العادي ، والذي يعود في النموذج الحرفي بدلاً من نمط السلسلة الذي تم تمريره في المُنشئ
var pattern = new regexp ('// [bc //] at' ، 'i') ؛ console.log (pattern.global) ؛ // falseconsole.log (pattern.ignorecase) ؛ // true console.log (pattern.multiline) ؛ // falseconsole.log (pattern.lastindex) ؛ // 0console.log (pattern.source) ؛ // '/[bc/] at'إذا كنت تستخدم وظيفة exec () أو test () لـ regexp وتعيين النمط العالمي 'g' ، فسيبدأ مطابقة التعبير العادي من موضع LastIndex ، وسيتم إعادة تعيين LastIndex بعد نجاح كل مباراة تحت المباراة. وبهذه الطريقة ، يمكنك التكرار مرارًا وتكرارًا في السلسلة والعثور على كل نتيجة مطابقة في التسلسل. ومع ذلك ، إذا كنت بحاجة إلى استدعاء نفس طريقة regexp exec () أو اختبار () لسلاسل مختلفة ، فقد يجلب هذا المتغير أيضًا نتائج مطابقة غير متوقعة. لذلك ، عند استبدال السلسلة ، يجب عليك تعيين LastIndex من regexp بشكل صريح إلى 0
// exec () طريقة إرجاع المطابقة في صفيف var p = // w/g ؛ var s = 'ab' ؛ console.log (p.lastIndex) ؛ // 0console.log (p.exec (s)) ؛ // ['a'] console.log (p.lastindex) ؛ // 1console.log ( p.exec (s)) ؛ // ['b'] console.log (p.lastindex) ؛ // 2console.log (p.exec (s)) ؛ // nullconsole.log (p.lastindex) ؛ // 0
var p = // w/g ؛ var s1 = 'ab' ؛ var s2 = 'ba' ؛ console.log (p.lastindex) ؛ // 0console.log (p.exec (s1)) ؛ // ['a'] console.log (p.lastindex) ؛ // 1console.log (p.exec (s2)) ؛ // ['a'] console.log (p.lastindex) ؛ // 2
خصائص مُنشئ
تعتبر خصائص مُنشئ REGEXP خصائص ثابتة تختلف بناءً على أحدث عملية تعبير منتظمة.
هناك طريقتان للوصول إليهما ، وهما أسماء السمات الطويلة وأسماء السمات القصيرة. معظم أسماء السمات القصيرة ليست معرفات ECMASCRIPT صالحة ، لذلك يجب الوصول إليها من خلال بناء جملة قوس مربع.
اسم السمة الطويلة اسم السمة القصير اسم الإدخال $ _ آخر سلسلة لتتطابق مع LastMatch $ وآخر مطابقة LastParen $+ آخر مباراة المباراة الأخيرة في مجموعة LeftContext $ `
باستخدام هذه الخصائص ، يمكن استخراج معلومات أكثر تحديدًا من العمليات التي تقوم بها طريقة exec ()
يتم استخدام // test () لاختبار ما إذا كانت السلسلة تتطابق مع تعبير منتظم وإرجاع قيمة var vare boolean = 'لقد كان هذا صيفًا قصيرًا ؛ var pattern =/. console.log (regexp.rightcontext) ؛ // 'summer' console.log (regexp.lastmatch) ؛ // 'Short' console.log (regexp.lastparen) ؛ // 's' console.log (regexp.multiline) ؛ console.log (regexp ['$ `']) ؛ // 'لقد كان هذا" وحدة تحكم. }
لدى JavaScript 9 خصائص مُنشأة لتخزين مجموعات الالتقاط. يتم ملء هذه الخصائص تلقائيًا عند استدعاء أساليب exec () أو test ().
[ملاحظة] من الناحية النظرية ، لا يوجد regexp. $ 0 الذي يجب حفظه في نص مطابقة التعبير بأكمله غير موجود ، القيمة غير محددة
//regexp.$1/regexp.$2/REGEXP.TOMER3..TO regexp. $ 9 يتم استخدامها لتخزين المجموعة الأولى ، الثانية ، التاسعة للمجموعة var var = 'لقد كان هذا صيفًا قصيرًا ؛ var pattern =/(..) أو (.)/g ؛ console.log (regexp. $ 2) ؛ // t}
مثال طريقة
هناك 5 طرق مثيل لكائنات regexp ، مقسمة إلى فئتين. بما في ذلك ثلاث طرق عامة للكائن: tostring () ، tolocalstring () ، valueof () ، وطرق المطابقة العادية للاختبار () و exec ()
الكائن طريقة شائعة
يرث كائن regexp ثلاث طرق: tostring () ، tolocalestring () ، و valueof () للكائن.
【tostring ()】
طريقة tostring () تُرجع الحرفية للتعبير العادي
【tolocalestring ()】
طريقة tolocalestring () إرجاع الحرفي للتعبير العادي
【valueof ()】
تقوم طريقة ValueOF () بإرجاع كائن التعبير العادي نفسه
[ملاحظة] بغض النظر عن التعبير العادي ، فإن هذه الأساليب الثلاثة تعيد فقط شكلها الحرفي
var pattern = new regexp ('[bc] at' ، 'gi') ؛ console.log (pattern.toString ()) ؛ // '/[bc] at/gi'console.log (pattern.tolocalestring ()) ؛ // '/[bc] at/gi'console.log (pattern.valueof ()) ؛ ///[bc] AT/givar pattern =/[bc] at/gi ؛ console.log (pattern.toString ()) ؛ // '/[bc] at/gi'console.log (pattern.tolocalestring ()) ؛ // '[bc] at/gi'console.log (pattern.valueof ()) ؛ ///[BC] AT/GIطريقة المطابقة العادية
لا يوجد سوى طريقتان مطابقة منتظمان لكائنات regexp: exec () و test () على التوالي.
【exec ()】
تم تصميم طريقة exec () خصيصًا لالتقاط المجموعات وتقبل المعلمة ، وهي السلسلة التي سيتم تطبيق النمط عليها. ثم ارجع صفيفًا يحتوي على معلومات المطابقة ، وأرجع NULL إذا لم يكن هناك تطابق.
في مجموعة المطابقة ، العنصر الأول عبارة عن سلسلة تتطابق مع النمط بأكمله ، والعناصر الأخرى هي سلسلة تتطابق مع مجموعة الالتقاط في النمط. إذا لم يكن هناك مجموعة التقاط في هذا النمط ، فإن الصفيف يحتوي فقط على مجموعة
يحتوي الصفيف الذي تم إرجاعه على خصائصين إضافية: الفهرس والإدخال. يعني الفهرس أن المطابقة في موضع السلسلة ، يعني الإدخال السلسلة التي يتم فيها تطبيق التعبير العادي
var text = 'Mom and Dad and Baby and others' ؛ var pattern =/mom (و dad (and baby)؟)؟ Baby '// Matches.Index: 0 // Matches.input: "أمي وأبي وطفل وآخرون"
بالنسبة لطريقة exec () ، حتى إذا تم تعيين العلم العالمي (G) في النمط ، فسيعود مباراة واحدة فقط في وقت واحد. دون تعيين العلامة العالمية ، فإن الاتصال exec () عدة مرات على نفس السلسلة سوف يعيد دائمًا معلومات المباراة الأولى ؛ أثناء تعيين العلامة العالمية ، ستستمر كل مكالمة إلى Exec () في البحث عن مباراة جديدة في السلسلة.
var text = 'cat ، bat ، sat ، fat' ؛ var pattern1 = /.at/ ؛ matches = pattern1.exec (text) ؛ console.log (pattern1 ، matches) ؛ // pattern1.lastindex: 0 // matches [0]: 'cat' // matches.Index: 0 // matches.inpt: 'cat ، bat ، sat ، extive =' cat ، pattern1.exec (text) ؛ console.log (Pattern1 ، Matches) ؛ //pattern1.lastindex:0//matches Budap00/'cat'//matches.index:0//matches.input
var text = 'cat ، bat ، sat ، fat' ؛ var pattern2 = /.at/g؛var matches = pattern2.exec (text) ؛ console.log (pattern2 ، matches) ؛ //pattern2.lastIndex:3//matches Budap000:'Cat'//matches.index:0//matches.input :'cat،bat،sat،fatar text = 'cat ، bat ، sat ، fat' ؛ matches = pattern2.exec (text) ؛ console.log (pattern2 ، matches) ؛ //pattern2.lastindex:7//matches Budap00/'bat'//matches.index:4//matches.input
【نصائح】 استخدم طريقة exec () للعثور على جميع مواقف المطابقة وجميع القيم
var string = 'j1h342jg24g234j 3g24j1' ؛ var pattern = // d/g ؛ var valuearray = [] ؛ // value var indexarray = [] indexArray.push (temp.index) ؛ } // ["1" ، "3" ، "4" ، "2" ، "2" ، "4" ، "2" ، "3" ، "4" ، "3" ، "2" ، "4" ، "1 ، 3 ، 4 ، 5 ، 9 ، 11 ، 12 ، 13 ، 16 ، 18 ، 19 ، 21]
【امتحان()】
يتم استخدام طريقة Test () لاختبار ما إذا كان التعبير العادي يمكن أن يجد النص المطابق في سلسلة ، وتلقي معلمة سلسلة ، وإرجاع صحيح عند المطابقة ، وإعادة إرجاع خطأ
var text = '000-00-000' ؛ var pattern = // d {3}-/d {2}-/d {4}/؛ if (pattern.test (text)) {console.log ('تم مطابقة النمط') ؛}وبالمثل ، عندما يتم استدعاء طريقة Test () ، سيتم تغيير خاصية LastIndex لكائن RegexP. إذا تم تحديد نمط عالمي ، في كل مرة يتم تنفيذ طريقة Test () ، ستتم محاولة مطابقة قيمة الإزاحة الأخيرة في السلسلة. لذلك ، يتم التحقق من سلاسل مختلفة عدة مرات مع نفس regexp. يجب تعيين قيمة LastIndex على 0 بعد كل مكالمة.
var pattern = /^/d {4 )-/d {2 )-/d {2) $/gr ؛ dounconsole.log(pattern.test('2016-06-23') /^/d {4 )-/d {2)/d {2) $/gritonsole.log(pattern.test('2016-06-23') 0 ؛ console.log (pattern.test ('2016-06-23')) ؛ // truepattern.lastindex = 0 ؛ console.log (pattern.test ('2016-06-23')) ؛ // trueكما ذكرنا سابقًا ، لدى JavaScript 9 خصائص مُنشأة لتخزين مجموعات الالتقاط. سيتم ملء هذه الخصائص تلقائيًا عند استدعاء طريقة exec () أو test ().
[ملاحظة] من الناحية النظرية ، لا يوجد regexp. $ 0 الذي يجب حفظه في نص مطابقة التعبير بأكمله غير موجود ، القيمة غير محددة
if (/^(/d {4})-(/d {2})-(/d {2}) $/. test ('2016-06-23')) {console.log (regexp. $ 1) ؛ // '2016' console.log (regexp. $ 2) ؛ console.log (regexp. $ 0) ؛ // undefined}ما سبق هو نوع JavaScript System_regex regexp نوع التفسير التفصيلي للتفاصيل. آمل أن يدعم الجميع wulin.com ~