JavaScript: Регулярні вирази

Групи захоплення та розширені можливості

📖 Теорія

Групи дозволяють захопити частину збігу:

💡 Приклад коду
Вивід:

                            
📝 ЗАВДАННЯ (3)
1.
Завдання 1: Витягти дату
10 XP
З рядка 'Замовлення від 15.03.2024 на суму 450 грн' витягни:
1. Дату (день, місяць, рік)
2. Суму

Виведи:
День: 15, Місяць: 03, Рік: 2024
Сума: 450
💡 Підказка: Для дати: /(\d{2})\.(\d{2})\.(\d{4})/. Для суми: /(\d+) грн/
🔓 Розв'язок:
const s = 'Замовлення від 15.03.2024 на суму 450 грн';
const [, day, month, year] = s.match(/(\d{2})\.(\d{2})\.(\d{4})/);
const [, sum] = s.match(/(\d+) грн/);
console.log(`День: ${day}, Місяць: ${month}, Рік: ${year}`);
console.log(`Сума: ${sum}`);
Вивід:

                                

2.
Завдання 2: Обробка тексту
20 XP
Є рядок: 'Ціна: 1500грн, знижка: 200грн, підсумок: 1300грн'
1. Знайди всі числа перед 'грн' (matchAll або match)
2. Порахуй суму всіх чисел
💡 Підказка: match(/\d+(?=грн)/g) або matchAll з групами
🔓 Розв'язок:
const s = 'Ціна: 1500грн, знижка: 200грн, підсумок: 1300грн';
const nums = s.match(/\d+(?=грн)/g).map(Number);
console.log(nums);
console.log(nums.reduce((a, b) => a + b, 0));
Вивід:

                                

3.
Завдання 3: Парсер CSV-рядка
30 XP
Напиши функцію parseCSVLine(line) що розбиває CSV-рядок на поля.
Правила: поля розділені комою, рядкові поля можуть бути в лапках.

Виведи результат для:
'Іван,28,Київ,"розробник, senior",true'
💡 Підказка: Regex для CSV: /("[^"]*"|[^,]+)(?:,|$)/g або простий split з обробкою лапок
🔓 Розв'язок:
function parseCSVLine(line) {
  const fields = [];
  const re = /(?:"([^"]*)"|([^,]*))/g;
  let match;
  while ((match = re.exec(line)) !== null) {
    if (match.index === re.lastIndex) re.lastIndex++;
    fields.push(match[1] !== undefined ? match[1] : match[2]);
    if (re.lastIndex >= line.length) break;
    re.lastIndex++;
  }
  return fields.filter(f => f !== undefined);
}
console.log(parseCSVLine('Іван,28,Київ,"розробник, senior",true'));
Вивід: