String.replaceAll în Dart

Text (String, StringBuffer, RegExp) Dart 1.0 (replaceAllMapped: Dart 1.0)

Înlocuiește toate aparițiile (replaceAll) sau doar prima (replaceFirst) unui text; replaceAllMapped calculează înlocuirea.

Sintaxă
String replaceAll(Pattern from, String replace)
String replaceFirst(Pattern from, String to, [int startIndex = 0])
String replaceAllMapped(Pattern from, String Function(Match match) replace)

Ce face String.replaceAll

replaceAll(vechi, nou) returnează un text nou în care fiecare apariție a lui vechi a fost înlocuită cu nou. replaceFirst înlocuiește doar prima apariție (opțional, începând de la o poziție). Ce cauți poate fi text simplu sau o RegExp.

replaceAllMapped(model, funcție) apelează funcția pentru fiecare potrivire și folosește ce returnează ea ca înlocuire. Funcția primește un Match, din care citești textul găsit cu m[0] și grupurile cu m[1], m[2]. Așa poți, de exemplu, dubla fiecare număr din text.

Spre deosebire de alte limbaje, în textul de înlocuire al lui replaceAll simbolurile $1 nu înseamnă grupuri; pentru grupuri folosește replaceAllMapped.

Parametri

Parametru Descriere
from Ce se caută (text sau RegExp).
replace / to Textul pus în loc.
replace (funcție) La replaceAllMapped: funcția care primește potrivirea și returnează înlocuirea.

Ce returnează

Un String nou.

Exemple

Exemplul 1: Înlocuiri simple

void main() {
  var text = 'Ana are mere. Ana are pere.';
  print(text.replaceAll('Ana', 'Ioana'));
  print(text.replaceFirst('Ana', 'Ioana'));
  print(text.replaceFirst('Ana', 'Ioana', 5));
  print('0722 123 456'.replaceAll(' ', ''));
  print('Ana   are    mere'.replaceAll(RegExp(r'\s+'), ' '));
}

Rezultat

Ioana are mere. Ioana are pere.
Ioana are mere. Ana are pere.
Ana are mere. Ioana are pere.
0722123456
Ana are mere

Exemplul 2: Eliminarea diacriticelor pentru un URL

String fateDiacritice(String s) {
  const inlocuiri = {'ă': 'a', 'â': 'a', 'î': 'i', 'ș': 's', 'ț': 't'};
  var rezultat = s.toLowerCase();
  inlocuiri.forEach((cu, fara) {
    rezultat = rezultat.replaceAll(cu, fara);
  });
  return rezultat.replaceAll(RegExp(r'[^a-z0-9]+'), '-');
}

void main() {
  print(fateDiacritice('Știri din Iași și Brăila'));
  print(fateDiacritice('Țară, pâine și înghețată'));
}

Rezultat

stiri-din-iasi-si-braila
tara-paine-si-inghetata

Exemplul 3: Înlocuire calculată cu replaceAllMapped

Mărim toate prețurile cu 10% și schimbăm ordinea datei din AAAA-LL-ZZ în ZZ.LL.AAAA, folosind grupurile.

void main() {
  var oferta = 'Cafea 10 lei, ceai 8 lei, prăjitură 15 lei';
  var scumpit = oferta.replaceAllMapped(RegExp(r'(\d+) lei'), (m) {
    var pret = int.parse(m[1]!) * 1.1;
    return '${pret.toStringAsFixed(2)} lei';
  });
  print(scumpit);

  var data = 'Examen: 2026-06-15, restanță: 2026-09-02';
  print(data.replaceAllMapped(RegExp(r'(\d{4})-(\d{2})-(\d{2})'), (m) => '${m[3]}.${m[2]}.${m[1]}'));
}

Rezultat

Cafea 11.00 lei, ceai 8.80 lei, prăjitură 16.50 lei
Examen: 15.06.2026, restanță: 02.09.2026

Greșeli frecvente

  • Scrii text.replaceAll(RegExp(r'(\d+)'), '[$1]') și te aștepți la grupul 1. Dart pune textul exact $1 (sau dă eroare de interpolare). Folosește replaceAllMapped.
  • Uiți că metoda returnează un text nou și nu schimbă variabila.

Comenzi înrudite

  • String.replaceRange: Înlocuiește bucata dintre două poziții cu alt text, fără să caute nimic.
  • RegExp: O expresie regulată: un model de text cu care cauți, verifici sau înlocuiești bucăți dintr-un text.
  • String.splitMapJoin: Împarte textul în potriviri și bucăți dintre ele, le transformă separat și le lipește la loc.