فهم عميق تعبيرات JS العادية --- التجميع
كتبت مقالًا عن البدء في التعبيرات العادية من قبل. اعتقدت أنني كنت على دراية نسبيًا بالتعبيرات العادية ، لكنني واجهت اليوم مأزقًا آخر. ربما كان ذلك لأنني لم أكن حذرا بما فيه الكفاية. سأركز اليوم على مشاركة التجميع في تعبيرات JavaScript العادية. إذا كنت لا تفهم تعبيرات JS العادية بما فيه الكفاية ، فيمكنك النقر هنا لمعرفة المزيد.
يستخدم التجميع على نطاق واسع في الانتظام. التجميع الذي أفهمه هو زوج من الأقواس (). يمثل كل زوج من الأقواس مجموعة ، ويمكن تقسيم المجموعة إلى:
• التقاط التجميع
• التجميع غير المشترك
التقاط التجميع
سيحصل التقاط التجميع على نتائج التجميع المقابل في شكل مصطلح ثانٍ وفصل ثالث في وظيفة مثل Match Exec. لنلقي نظرة على مثال أولاً
var reg =/test (/d+)/؛ var str = 'new test001 test002' ؛ console.log (str.match (reg)) ؛ // ["test001" ، "001" ، الفهرس: 4 ، الإدخال: "اختبار جديد 001"]
في الكود (/d+) عبارة عن مجموعة (يطلق عليها بعض الأشخاص أيضًا نماذج فرعية) ، لكنهم يمثلون نفس المعنى. في المثال أعلاه ، Test001 هو نتيجة المطابقة الدقيقة. ومع ذلك ، فإن مطابقة المجموعة هي العثور على أحرف تطابق النمط الفرعي/D+ من نتيجة المطابقة الدقيقة بالكامل (أي Test001). من الواضح هنا 001. لكن الوضع الذي واجهته اليوم مثل هذا.
var reg =/test (/d)+/؛ var str = 'new test001 test002' ؛ console.log (str.match (reg)) ؛ // ["test001" ، "1" ، index: 4 ، input: "new test001"]
الفرق هو أن (/d+) يتم تغييره إلى (/d)+، وأن نتيجة المطابقة بأكملها لا تزال Test001 ، ولكن نتيجة مطابقة المجموعة الأولى مختلفة. دعونا نلقي نظرة على خلافاتهم
(/D+) هذا هو وضع التجميع. نظرًا لأن نمط المطابقة هو نمط جشع ، أي ما يتطابق فيه عدد ممكن من المطابقة /D+ ، فإن نتيجة المباراة هي 001 ، ثم تتم إضافة زوج من الأقواس في الخارج ، مما يعني التجميع ، وبالتالي فإن نتيجة المباراة في المجموعة الأولى هي 001. دعنا ننظر إلى ( /d)+ في المثال الثاني. هذا هو أيضا نمط الجشع. أولاً ، سوف يتطابق مع 0 ثم 0 ثم تطابق مع نهاية 1. كما أنه يتطابق مع نهاية هذه المباراة. يبدو أنه لا يوجد فرق بين المباراة في المثال الأول ، لكن التجميع (/d) هنا يعني مطابقة رقم واحد. وفقًا لفهمي السابق ، فهو 0 ، لكن هذا الفهم خاطئ. نظرًا لأن المباراة بأكملها عبارة عن نمط جشع ، فإن مطابقة قدر الإمكان (/D) في المجموعة سوف تلتقط النتيجة 1 من المباراة الأخيرة. إذا كان نمطًا غير حاضر ، فسيتوافق مع أقل قدر ممكن.
var reg =/test (/d)+؟/؛ var str = 'new test001 test002' ؛ console.log (str.match (reg)) ؛ // ["test001" ، "0" ، index: 4 ، input: "new test001"]
وبهذه الطريقة ، تكون النتيجة المطابقة (/D) هي 0.
التجميع غير المشترك
يعني التجميع غير المشترك أن هناك حاجة إلى زوج من الأقواس في بعض الأماكن ، لكنها لا تريد أن تكون مجموعة التقاط ، أي أنها لا تريد استرداد هذه المجموعة بواسطة وظائف مثل Macth Exec. عادة ، يسبقها أقواس (؟: نمط) بحيث يصبح مجموعة غير محصنة.
var reg =/test (؟:/d)+/؛ var str = 'new test001 test002' ؛ console.log (str.match (reg)) ؛ // ["test001" ، الفهرس: 4 ، المدخلات: "Test001 New Test002"]
وبهذه الطريقة ، لن يكون هناك محتوى مطابق في نتيجة مطابقة المباراة ، مما يعني أن العنصر الثاني مفقود.
تركز هذه المقالة على شرح الفرق بين (/d+) و (/d)+، وهو أيضًا الحفرة التي صعدت إليها اليوم. إذا كانت هناك أي أخطاء ، فلا تتردد في تصحيحها.
تحتوي المقالة أعلاه على فهم عميق للتعبيرات العادية JS-مجموعة المجموعات هي كل المحتوى الذي شاركته معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.