سلسلة قالب شبيبة ES6

استخدام الأساسية

ترك رسالة = `مرحبا World`. console.log (رسالة)؛

إذا كنت يحدث لاستخدام معاداة الفاصلة العليا في السلسلة، يمكنك استخدام الخط المائل العكسي:

ترك رسالة = `مرحبا \ 'World`. console.log (رسالة)؛

ومن الجدير بالذكر أنه في سلسلة قالب، مسافات، تزكي، سيتم الاحتفاظ فواصل الأسطر:

ترك رسالة = ` < المجاهدين > < لى > 1 < / لي > < لى > 2 < / لي > < / UL > `. console.log (رسالة)؛

علما بأن نتائج خط الطباعة الأول هو سطر تغذية، يمكنك استخدام وظيفة تقليم للقضاء على التفاف:

ترك رسالة = ` < المجاهدين > < لى > 1 < / لي > < لى > 2 < / لي > < / UL > `.Trim ()؛ console.log (رسالة)؛

المتغيرات جزءا لا يتجزأ من

يدعم جزءا لا يتجزأ من متغير سلسلة القالب، اسم المتغير تحتاج فقط لكتابة $ {} في الواقع، أكثر من متغير، وتعبيرات جافا سكريبت التعسفية ممكنة:

دعونا س = 1، ص = 2؛ ترك رسالة = ` < المجاهدين > < لى > $ {X} < / لي > < لى > $ {X + ص} < / لي > < / UL > `. console.log (رسالة)؛ // < المجاهدين > < لى > 1 < / لي > < لى > 3 < / لي > < / UL >

ومن الجدير بالذكر أن سلسلة تدعم قالب متداخلة:

السماح آر = . ترك رسالة = ` < المجاهدين > $ {Arr.map ((البند) = >  { عودة ` < لى > $ {Item.value} < / لي > ` })} < / UL > `. console.log (رسالة)؛

النتائج المطبوعة هي كما يلي:

لاحظ أنه في منتصف متعددة التسمية لى فاصلة، وهذا هو لأنه عندما الأقواس عندما تكون القيمة ليست سلسلة، والتي سيتم تحويلها إلى سلسلة، مثل مجموعة سيتم تحويلها إلى 1، 2، 3، يتم إنتاج فاصلة.

إذا كنت ترغب في القضاء على هذه فاصلة، يمكنك الانضمام لأول مرة:

السماح آر = . ترك رسالة = ` < المجاهدين > $ {Arr.map ((البند) = >  { عودة ` < لى > $ {Item.value} < / لي > ` }). تاريخ ( '')} < / UL > `. console.log (رسالة)؛

النتائج المطبوعة هي كما يلي:

قوالب التسمية

العلامة القالب هو القدرة مهمة للغاية، وعلى الفور بعد سلسلة قالب قد يكون اسم الوظيفة، سيتم استدعاء الدالة للتعامل مع هذه السلسلة القالب، على سبيل المثال:

دعونا س = 'مرحبا'، = ص "كيفن". فار الدقة = message` $ {س}، أنا $ {ص} `. console.log (احتياط)؛

يمكننا تخصيص وظيفة الرسالة لمعالجة سلسلة عاد:

// النص الحرفية // لاحظ أن العنصر الأول والعنصر الأخير من سلسلة حرفية فارغة في هذه الحالة رسالة ظيفة (حرفية، VALUE1، و value2) { console.log (الحرفية)؛ // console.log (VALUE1)؛ // مرحبا console.log (و value2)؛ // كيفن }

نحن نستخدم هذه المعلمة لوضع معا مرة أخرى:

رسالة ظيفة (حرفية، ... القيم) { السماح نتيجة = ''؛ ل(السماح ط = 0؛ ط <  values.length، وأنا ++) { يؤدي + = الحرفية . يؤدي + = القيم . } يؤدي + = الحرفية . العودة نتيجة. }

يمكنك أيضا كتابة:

رسالة ظيفة (حرفية، ... القيم) { السماح نتيجة = literals.reduce ((السابق، المقبل، ط) = >  { السماح قيمة = القيم . عودة سابق + قيمة + المقبل. })؛ العودة نتيجة. }

تعلم لوضع معا مرة أمر مهم جدا، لأننا يتعرضون لالعلاجات المختلفة، وفي نهاية المطاف لا تزال لديها للرد ......

oneLine

الانتهاء من الأساس، يمكننا أن ننظر إلى بعض الاحتياجات العملية:

ترك رسالة = ` مرحبا، ديزي! I صباحا كيفن. `.

من أجل قراءة أو لأسباب أخرى، وأود أن أكتب عندما ملفوفة، ولكن الحرف هو في الإخراج النهائي للخط، الأمر الذي يتطلب مساعدة من علامات قالب لتحقيقه، وحاولنا كتابة دالة مثل هذا:

// oneLine الطبعة الأولى oneLine وظيفة (قالب ... عبارات) { السماح نتيجة = template.reduce ((السابق، المقبل، ط) = >  { دعونا التعبير = التعبيرات . عودة سابق + التعبير + المقبل. })؛ يؤدي = result.replace (/ (\ ق +) / ز، "")؛ يؤدي = result.trim ()؛ العودة نتيجة. }

والمبدأ هو بسيط، وعدد وافر من فواصل خط انقسام عودة مثل بيضاء، مربع، الخ استبدال بمسافة.

استخدام على النحو التالي:

ترك رسالة = oneLine ` مرحبا، ديزي! I صباحا كيفن. `. console.log (رسالة)؛ // مرحبا، ديزي أنا كيفن !.

ولكن سوف تجد مشكلة ويذهب بعد ذلك، إذا قمت بتضمين المسافات المتعددة بين الأحرف تفعل؟ على سبيل المثال:

ترك رسالة = oneLine` الحفاظ على الجمل سبيل المثال. مزدوج المساحات داخل خطوط الإدخال. `.

إذا كان هذا الأسلوب مطابقة، والجمل، وسيتم استبدال مضاعفة مساحة بين اثنين مع الفضاء.

نحن يمكن بعد ذلك على الوجه الأمثل، ما نريد هو استبدال المسافات المتعددة أمام كل سطر في الفضاء، في الواقع، ينبغي أن يقابل المزيد من المساحات وراء فواصل الأسطر وفواصل الأسطر، ومن ثم استبدالها الفضاء، ونحن يمكنك أن تكون القراءة العادية:

يؤدي = result.replace (/ (\ ن \ ق *) / ز، "")؛

ويمكن أن تتطابق مع الرمز الصحيح. رمز النهائية كما يلي:

// oneLine الطبعة الثانية oneLine وظيفة (قالب ... عبارات) { السماح نتيجة = template.reduce ((السابق، المقبل، ط) = >  { دعونا التعبير = التعبيرات . عودة سابق + التعبير + المقبل. })؛ يؤدي = result.replace (/ (\ ن \ ق *) / ز، "")؛ يؤدي = result.trim ()؛ العودة نتيجة. }

stripIndents

تخيل جزء من HTML:

السماح أتش تي أم أل = ` < شبر > 1 < شبر > < شبر > 2 < شبر > < شبر > 3 < شبر > `.

من أجل الحفاظ على القراءة، أريد أن أدخل نمط النهائي هو:

< شبر > 1 < شبر > < شبر > 2 < شبر > < شبر > 3 < شبر >

وفي مباراة الواقع أمام كل مساحة سطر ثم استبدالها سلسلة فارغة.

// stripIndents الطبعة الأولى stripIndents وظيفة (قالب ... عبارات) { السماح نتيجة = template.reduce ((السابق، المقبل، ط) = >  { دعونا التعبير = التعبيرات . عودة سابق + التعبير + المقبل. })؛ يؤدي = result.replace (/ \ ن * / ز، '\ ن')؛ يؤدي = result.trim ()؛ العودة نتيجة. }

ولعل هذا هو معظم التعابير العادية صعبة:

يؤدي = result.replace (/ \ ن * / ز، '\ ن')؛

\ S والذي يطابق الطابع غير بيضاء،

يمثل أحرف غير مطابقة الأخرى من الشخصيات وفواصل الأسطر الفارغة، في الحقيقة، هو لإزالة المسافات أحرف السطر الجديد

\ N * يمثل حرف سطر جديد وفارغ تضم عدد وافر من الراحة السطر بعد السطر

استبدال (/ \ ن * / ز، '\ ن') يشير إلى وجود خط تغذية وافر من فواصل الأسطر بعد تحتوي على حرف السطر الجديد فارغة استبدال خط فاصل، في الواقع، هو حرف السطر الجديد فارغة تختفي وراء معنى

في واقع الأمر، لا أكتب الكثير من المتاعب، يمكننا أيضا كتابة:

يؤدي = result.replace (/ ^ + / جم، '')؛

يبدو قليلا بسيطة، وتمكنت أن أكتب في ذلك بسبب نمط مطابقة، وسوف تجد، بالإضافة إلى مطابقة للحالة العامة، وهذه المرة نحن أيضا مباراة أكثر من صف واحد، ويستخدم متر العلم لتحديد سلسلة الإدخال متعددة يجب أخذها في الاعتبار عند تعدد الصفوف، وإذا تم استخدام العلم م ^ و$ تطابق بداية أو نهاية كل سطر من سلسلة الإدخال، بدلا من السلسلة بأكملها من بداية أو نهاية.

يمثل فارغة السطر مطابقة الطابع إزالة

^ + يشير يطابق حرف السطر الجديد لإزالة فارغة أو تعدد الشخصيات في بداية

result.replace (/ ^ + / جم، '') يشير إلى بداية كل سطر واحد أو أكثر الشخصيات فارغة استبدال السطر إزالتها مع سلسلة لاغية، وأيضا تحقيق هذا الغرض.

رمز النهائية كما يلي:

// stripIndents الطبعة الثانية stripIndents وظيفة (قالب ... عبارات) { السماح نتيجة = template.reduce ((السابق، المقبل، ط) = >  { دعونا التعبير = التعبيرات . عودة سابق + التعبير + المقبل. })؛ يؤدي = result.replace (/ ^ + / جم، '')؛ يؤدي = result.trim ()؛ العودة نتيجة. }

stripIndent

ملاحظة، عنوان هذا أقل إلكتروني الصورة stripIndent واحد مقارنة مع أعلى واحد، ويتميز نريد تحقيقه هو:

السماح أتش تي أم أل = ` < المجاهدين > < لى > 1 < / لي > < لى > 2 < / لي > < لى > 3 < / لي > < المجاهدين > `.

في الواقع، وهذا هو إزالة جزء من الخط الجديد والسطر الأول من كل المسافة البادئة للسطر.

إرادة تنفيذ هذه مشكلة قليلا، لأن لدينا لحساب عدد كل سطر في النهاية إلى إزالة المسافات حرفا.

أفكار لتحقيق ما يلي:

  • باستخدام وظيفة مباراة، مطابقة حرف فارغة في الخط، كل صف من مجموعة للحصول على شخصية فارغة يرد
  • مقارن مجموعة اجتياز، يجب الحصول على الحد الأدنى بيضاء طول
  • بناء تعبير عادي، ثم طول الحد الأدنى من كل صف محل بيضاء
  • ويتم تنفيذ التعليمات البرمجية كما يلي:

    السماح أتش تي أم أل = ` < المجاهدين > < لى > 1 < / لي > < لى > 2 < / لي > < لى > 3 < / لي > < المجاهدين > `. stripIndent وظيفة (قالب ... عبارات) { السماح نتيجة = template.reduce ((السابق، المقبل، ط) = >  { دعونا التعبير = التعبيرات . عودة سابق + التعبير + المقبل. })؛ مباراة CONST = result.match (/ ^ * (= \ S) / جم؟)؛ console.log (مباراة)؛ // صفيف CONST المسافة البادئة = تطابق && Math.min (... match.map (ايل = >  el.length))؛ console.log (مسافة بادئة)؛ // 4 إذا (مسافة بادئة) { CONST التعبير العادي = التعبير العادي الجديد ( `^ {$ {البادئة}}`، 'جنرال موتورز')؛ console.log (التعبير العادي)؛ // /^.{4}/gm يؤدي = result.replace (التعبير العادي، '')؛ } يؤدي = result.trim ()؛ العودة نتيجة. }

    ومن الجدير بالذكر أن نعتقد عموما أن في المنتظم. تتطابق مع وسائل أي حرف مباريات في الواقع أي حرف واحد باستثناء سطر جديد.

    رمز مبسط النهائي على النحو التالي:

    stripIndent وظيفة (قالب ... عبارات) { السماح نتيجة = template.reduce ((السابق، المقبل، ط) = >  { دعونا التعبير = التعبيرات . عودة سابق + التعبير + المقبل. })؛ مباراة CONST = result.match (/ ^ * (= \ S) / جم؟)؛ CONST المسافة البادئة = تطابق && Math.min (... match.map (ايل = >  el.length))؛ إذا (مسافة بادئة) { CONST التعبير العادي = التعبير العادي الجديد ( `^ {$ {البادئة}}`، 'جنرال موتورز')؛ يؤدي = result.replace (التعبير العادي، '')؛ } يؤدي = result.trim ()؛ العودة نتيجة. }

    includeArrays

    من أجل تجنب ما سبق ذكرنا تعبيرات $ {} بإرجاع صفيف، عدد وافر من التحويل التلقائي يمكن أن يسبب مشاكل فاصلة، كل احتياجات مجموعة وأخيرا الانضمام ( '')، وقراءة آخر من خلال الأمثلة على ذلك:

    السماح آر = . ترك رسالة = ` < المجاهدين > $ {Arr.map ((البند) = >  { عودة ` < لى > $ {Item.value} < / لي > ` }). تاريخ ( '')} < / UL > `. console.log (رسالة)؛

    استخدام القوالب التسمية، يمكننا بسهولة حل هذه المشكلة:

    includeArrays وظيفة (قالب ... عبارات) { السماح نتيجة = template.reduce ((السابق، المقبل، ط) = >  { دعونا التعبير = التعبيرات . إذا (Array.isArray (التعبير)) { التعبير = expression.join ( '')؛ } عودة سابق + التعبير + المقبل. })؛ يؤدي = result.trim ()؛ العودة نتيجة. }

    هولندا تحول الخمول السجن! استقبال اللاجئين، وبناء فندق، شقة واحدة مفتوحة

    البقاء على قيد الحياة كلمات وتوبي 30 عاما من الصداقة، من الكراث الأحداث يرافقه الآن، الحب أيضا هو

    فى قوانغدونغ وهونغ كونغ منطقة خليج تسعى الى "فرص الغربية،" ما هي الآثار؟

    امرأة لتكون الشهيرة، في الواقع تشجيع صديقها على الانتحار؟ !

    قوانغتشو للسيارات ميتسوبيشي معززة كتابة الحب الأحمر صافي هونان وثائقي شينجيانغ "شيانغ جيانغ 20 عاما" على الخط

    يريد الشمس لثاني أكسيد التيتانيوم جنيه؟ وقال شو منغ منغ الكيميائية

    السياح بلدة السويسري التقاط الصور محظور: على أساس أن الصورة جميلة جدا!

    لإهانة النساء للمتعة؟ "النخبة" الطلاب هم أيضا الجانب المظلم غير معروف

    سر الكاتراز: Chachinantao السجون في الخارج، والمجرمين أسطورة أخطر

    شو المعرفة الجديدة بالإضافة إلى بيئة الفضاء القاسية، السير في الفضاء رواد الفضاء هناك أي خطر؟

    قبل 25 عاما، زوجين مسنين مع رحلة فان في وقت لاحق، 25 عاما، ومرة أخرى في رحلة

    مثال وبطلا قوميا، سون هيونغ مين لندن، مهاجر الكورية المصدر المجتمع فخر