לדלג לתוכן

2.8 מחרוזות תרגול

תרגול מחרוזות


תרגיל 1 - עיבוד מחרוזות בסיסי

כתבו פונקציות לכל אחד מהבאים:

  1. capitalize(str) - מחזירה את המחרוזת כשהאות הראשונה גדולה והשאר קטנות:
capitalize("hello WORLD"); // "Hello world"
  1. countChar(str, char) - סופרת כמה פעמים תו מסוים מופיע במחרוזת:
countChar("hello world", "l"); // 3
  1. reverseString(str) - הופכת מחרוזת:
reverseString("hello"); // "olleh"
  1. isPalindrome(str) - בודקת אם מחרוזת היא פלינדרום (מתעלמת מרווחים ומרישיות):
isPalindrome("Race Car"); // true
isPalindrome("hello");    // false
  1. removeVowels(str) - מסירה את כל התנועות (a, e, i, o, u):
removeVowels("Hello World"); // "Hll Wrld"

תרגיל 2 - Template Literals

  1. כתבו פונקציה createEmailTemplate(name, product, price) שמחזירה תבנית אימייל:
createEmailTemplate("Alice", "Laptop", 5000);
// returns:
// "Dear Alice,
//
// Thank you for purchasing Laptop.
// Your total is: $5,000.00
//
// Best regards,
// The Store"

השתמשו ב-template literals עם מרובה שורות.

  1. כתבו פונקציה createHTMLCard(title, description, imageUrl) שמחזירה HTML של כרטיס:
createHTMLCard("JavaScript", "The best language", "js.png");
// returns:
// <div class="card">
//   <img src="js.png" alt="JavaScript">
//   <h2>JavaScript</h2>
//   <p>The best language</p>
// </div>

תרגיל 3 - ניתוח ועיצוב

  1. כתבו פונקציה formatPhoneNumber(phone) שמקבלת מספר טלפון בפורמט כלשהו ומחזירה אותו בפורמט אחיד:
formatPhoneNumber("0501234567");    // "050-123-4567"
formatPhoneNumber("050-1234567");   // "050-123-4567"
formatPhoneNumber("050 123 4567");  // "050-123-4567"
  1. כתבו פונקציה extractDomain(email) שמחלצת את הדומיין מכתובת אימייל:
extractDomain("alice@gmail.com");       // "gmail.com"
extractDomain("bob@company.co.il");     // "company.co.il"
  1. כתבו פונקציה maskCreditCard(number) שמסתירה את רוב הספרות:
maskCreditCard("4580123456789012"); // "****-****-****-9012"

תרגיל 4 - מניפולציות מתקדמות

  1. כתבו פונקציה toCamelCase(str) שממירה מחרוזת ל-camelCase:
toCamelCase("hello world");       // "helloWorld"
toCamelCase("background-color");  // "backgroundColor"
toCamelCase("font_size");         // "fontSize"
  1. כתבו פונקציה toSnakeCase(str) שממירה ל-snake_case:
toSnakeCase("Hello World");      // "hello_world"
toSnakeCase("backgroundColor");  // "background_color"
toSnakeCase("fontSize");         // "font_size"
  1. כתבו פונקציה toTitleCase(str) שהופכת כל מילה להתחיל באות גדולה:
toTitleCase("hello world from javascript"); // "Hello World From Javascript"

תרגיל 5 - CSV Parser

כתבו פונקציה parseCSV(csvString) שמקבלת מחרוזת CSV ומחזירה מערך של אובייקטים.

השורה הראשונה היא שמות העמודות:

const csv = `name,age,city
Alice,25,Tel Aviv
Bob,30,Jerusalem
Charlie,35,Haifa`;

parseCSV(csv);
// [
//   { name: "Alice", age: "25", city: "Tel Aviv" },
//   { name: "Bob", age: "30", city: "Jerusalem" },
//   { name: "Charlie", age: "35", city: "Haifa" }
// ]

בונוס: כתבו גם פונקציה הפוכה toCSV(arrayOfObjects) שממירה מערך של אובייקטים חזרה למחרוזת CSV.


תרגיל 6 - מנוע חיפוש פשוט

כתבו פונקציה search(text, query) שמקבלת טקסט ומילת חיפוש ומחזירה:
- כמה פעמים המילה מופיעה
- את המיקומים (אינדקסים) של כל ההופעות
- את המשפט שבו כל הופעה נמצאת

const text = "JavaScript is great. I love JavaScript. JavaScript is everywhere.";

search(text, "JavaScript");
// {
//   count: 3,
//   positions: [0, 27, 40],
//   contexts: [
//     "JavaScript is great.",
//     "I love JavaScript.",
//     "JavaScript is everywhere."
//   ]
// }

החיפוש צריך להיות case-insensitive.


תרגיל 7 - מחולל סיסמאות

כתבו פונקציה generatePassword(length, options) שמחוללת סיסמה אקראית.

generatePassword(12, { uppercase: true, lowercase: true, numbers: true, symbols: true });
// "aB3$kL9#mN2!" (random)

generatePassword(8, { uppercase: true, lowercase: true, numbers: true, symbols: false });
// "aB3kL9mN" (random, no symbols)

generatePassword(4, { uppercase: false, lowercase: false, numbers: true, symbols: false });
// "7392" (random, numbers only)

בונוס: כתבו גם פונקציה checkPasswordStrength(password) שמחזירה "weak", "medium" או "strong":
- weak - רק אותיות קטנות, או פחות מ-6 תווים
- medium - מכילה אותיות גדולות וקטנות ומספרים, לפחות 8 תווים
- strong - מכילה אותיות, מספרים ותווים מיוחדים, לפחות 12 תווים


תרגיל 8 - עיבוד URL

כתבו פונקציות לעבודה עם כתובות URL:

  1. parseURL(url) - מפרקת URL לרכיבים:
parseURL("https://www.example.com:8080/path/to/page?name=alice&age=25#section1");
// {
//   protocol: "https",
//   host: "www.example.com",
//   port: "8080",
//   path: "/path/to/page",
//   query: { name: "alice", age: "25" },
//   hash: "section1"
// }
  1. buildURL(base, params) - בונה URL מבסיס ופרמטרים:
buildURL("https://api.example.com/search", { q: "javascript", page: 1, limit: 10 });
// "https://api.example.com/search?q=javascript&page=1&limit=10"

רמז: השתמשו ב-split כדי לפרק את ה-URL.