RegExp.escape în Dart

Pune \ în fața caracterelor speciale dintr-un text, ca să fie căutat exact așa cum este într-o RegExp.

Sintaxă
static String escape(String text)

Ce face RegExp.escape

În expresiile regulate, caractere ca ., *, +, ?, (, ), [, $ au sens special. Dacă vrei să cauți un text care le conține (de exemplu 3.5 sau (Iași)), trebuie „scăpate” cu \. RegExp.escape(text) face asta automat.

Este necesară mai ales când textul căutat vine de la utilizator: un câmp de căutare în care cineva scrie c++ ar da altfel o expresie greșită. Combină textul scăpat cu alte bucăți de model, de exemplu RegExp('\\b${RegExp.escape(cuvant)}\\b').

Parametri

Parametru Descriere
text Textul care trebuie căutat literal.

Ce returnează

Un String care poate fi folosit ca model.

Exemple

Exemplul 1: Caractere speciale scăpate

void main() {
  print(RegExp.escape('3.5'));
  print(RegExp.escape('(Iași)'));
  print(RegExp.escape('c++ sau c#?'));
  var gresit = RegExp('3.5');
  var corect = RegExp(RegExp.escape('3.5'));
  print(gresit.hasMatch('305'));
  print(corect.hasMatch('305'));
  print(corect.hasMatch('nota 3.5'));
}

Rezultat

3\.5
\(Iași\)
c\+\+ sau c#\?
true
false
true

Exemplul 2: Căutare după textul utilizatorului

void main() {
  var produse = ['Cablu USB (1m)', 'Cablu USB (2m)', 'Mouse', 'Încărcător 2.4A'];
  for (var cautat in ['(1m)', '2.4', 'usb']) {
    final re = RegExp(RegExp.escape(cautat), caseSensitive: false);
    print('$cautat: ${produse.where(re.hasMatch).toList()}');
  }
}

Rezultat

(1m): [Cablu USB (1m)]
2.4: [Încărcător 2.4A]
usb: [Cablu USB (1m), Cablu USB (2m)]

Greșeli frecvente

  • Pui textul utilizatorului direct în RegExp(text). Un text ca ( aruncă FormatException, iar . potrivește orice caracter.

Comenzi înrudite

  • RegExp: O expresie regulată: un model de text cu care cauți, verifici sau înlocuiești bucăți dintr-un text.
  • RegExp.hasMatch: hasMatch spune dacă modelul apare în text; stringMatch returnează textul primei potriviri sau null.