127 lines
7.7 KiB
Markdown
127 lines
7.7 KiB
Markdown
|
---
|
|||
|
title: Spinal Tap Case
|
|||
|
localeTitle: حنفية شبكية
|
|||
|
---
|
|||
|
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 ": triangular_flag_on_post:") تذكر استخدام **`Read-Search-Ask`** إذا واجهتك مشكلة. حاول إقران البرنامج ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") واكتب الكود الخاص بك ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":قلم:")
|
|||
|
|
|||
|
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ":العلم متقلب:") شرح المشكلة:
|
|||
|
|
|||
|
قم بتحويل السلسلة المعطاة إلى جملة صغيرة بالكلمات المرتبطة بشُرط.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [كائن عالمي السلسلة](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
|
|||
|
* شبيبة ريجكس الموارد
|
|||
|
* [JS String Prototype Replace](http://forum.freecodecamp.com/t/javascript-string-prototype-replace/15942)
|
|||
|
* [JS String Prototype ToLowerCase](http://forum.freecodecamp.com/t/javascript-string-prototype-tolowercase/15948)
|
|||
|
|
|||
|
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") تلميح: 1
|
|||
|
|
|||
|
قم بتكوين تعبير عادي لكل المساحات البيضاء والشرطات السفلية.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") تلميح: 2
|
|||
|
|
|||
|
سيكون عليك أيضًا جعل كل شيء صغيرًا.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") تلميح: 3
|
|||
|
|
|||
|
الجزء الصعب هو الحصول على جزء التعبير العادي للعمل ، بمجرد القيام بذلك ، ثم مجرد تحويل الأحرف الكبيرة إلى أحرف صغيرة واستبدال المسافات مع الشرطات السفلية باستخدام `replace()` .
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
## تنبيه المفسد!
|
|||
|
|
|||
|
![علامة تحذير](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
|
|||
|
|
|||
|
**الحل في المستقبل!**
|
|||
|
|
|||
|
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":مبتدئ:") الحل الأساسي للكود:
|
|||
|
|
|||
|
`function spinalCase(str) {
|
|||
|
// Create a variable for the white space and underscores.
|
|||
|
var regex = /\s+|_+/g;
|
|||
|
|
|||
|
// Replace low-upper case to low-space-uppercase
|
|||
|
str = str.replace(/([az])([AZ])/g, '$1 $2');
|
|||
|
|
|||
|
// Replace space and underscore with -
|
|||
|
return str.replace(regex, '-').toLowerCase();
|
|||
|
}
|
|||
|
|
|||
|
// test here
|
|||
|
spinalCase('This Is Spinal Tap');
|
|||
|
`
|
|||
|
|
|||
|
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":صاروخ:") [تشغيل الكود](https://repl.it/CLnS/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* يحتوي **regex** على التعبير العادي `/\s+|_+/g` ، والذي سيحدد كل المسافات البيضاء والشرطات السفلية.
|
|||
|
* يضع `replace()` الأول `replace()` مسافة قبل أي أحرف كبيرة تمت مصادفتها في **str** السلسلة بحيث يمكن استبدال المسافات بشُرط في وقت لاحق.
|
|||
|
* أثناء استعادة السلسلة ، `replace()` آخر `replace()` المسافات والشرطات السفلية باستخدام الشرطات باستخدام **regex** .
|
|||
|
|
|||
|
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":دوار الشمس:") حل الشفرة المتوسطة:
|
|||
|
|
|||
|
`function spinalCase(str) {
|
|||
|
// Replace low-upper case to low-space-uppercase
|
|||
|
str = str.replace(/([az])([AZ])/g, '$1 $2');
|
|||
|
// Split on whitespace and underscores and join with dash
|
|||
|
return str.toLowerCase().split(/(?:_| )+/) .join('-');
|
|||
|
}
|
|||
|
|
|||
|
// test here
|
|||
|
spinalCase('This Is Spinal Tap');
|
|||
|
`
|
|||
|
|
|||
|
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":صاروخ:") [تشغيل الكود](https://repl.it/CLnT/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* على غرار الحل الأول ، يضع `replace()` الأول `replace()` مسافة قبل أي أحرف كبيرة تمت رؤيتها في **str** السلسلة بحيث يمكن استبدال المسافات بشُرط في وقت لاحق.
|
|||
|
* بدلاً من استخدام `replace()` هنا لاستبدال whitespace والشرطات السفلية مع الشرطات ، يتم `split()` السلسلة `split()` على التعبير العادي `/(?:_| )+/` و `join()` `-` على `-` .
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [JS String Prototype Split](http://forum.freecodecamp.com/t/javascript-string-prototype-split/15944)
|
|||
|
* [شبيبة صفيف النموذج](http://forum.freecodecamp.com/t/javascript-array-prototype-join/14292)
|
|||
|
|
|||
|
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") الحل المتقدم للكود:
|
|||
|
|
|||
|
`function spinalCase(str) {
|
|||
|
// "It's such a fine line between stupid, and clever."
|
|||
|
// --David St. Hubbins
|
|||
|
|
|||
|
return str.split(/\s|_|(?=[AZ])/).join('-').toLowerCase()
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":صاروخ:") [تشغيل الكود](https://repl.it/EUZV)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* تقسيم السلسلة في أحد الشروط التالية (تم _تحويلها إلى صفيف_ )
|
|||
|
* تم العثور على حرف مسافة بيضاء \[ `\s` \]
|
|||
|
* تم اكتشاف حرف الشرطة السفلية \[ `_` \]
|
|||
|
* أو متبوعاً بحرف كبير \[ `(?=[AZ])` \]
|
|||
|
* الانضمام إلى الصفيف باستخدام واصلة ( `-` )
|
|||
|
* أحرف صغيرة السلسلة الناتجة بأكملها
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [سلسلة # انقسام](http://devdocs.io/javascript/global_objects/string/split)
|
|||
|
* [التعبير العادي](http://devdocs.io/javascript/global_objects/regexp)
|
|||
|
* [Arrray # الانضمام](http://devdocs.io/javascript/global_objects/array/join)
|
|||
|
* [سلسلة # toLowerCase](http://devdocs.io/javascript/global_objects/string/tolowercase)
|
|||
|
|
|||
|
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ": الحافظة:") ملاحظات للمساهمات:
|
|||
|
|
|||
|
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":تحذير:") **لا تقم** بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها **_مشابهة ولكن أفضل_** ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
|
|||
|
* أضف شرحًا لحلك.
|
|||
|
* تصنيف الحل في واحدة من الفئات التالية - **الأساسي** **والمتوسط** **والمتقدم** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ": traffic_light:")
|
|||
|
* الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي **محتويات رئيسية ذات صلة** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":تحذير:") **_لا_** _تزيل أي أسماء مستخدمين حالية_ )
|
|||
|
|
|||
|
> نرى ![:point_right:](https://forum.freecodecamp.com/images/emoji/emoji_one/point_right.png?v=3 ": point_right:") [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) كمرجع.
|