freeCodeCamp/curriculum/challenges/italian/02-javascript-algorithms-an.../regular-expressions/use-capture-groups-to-searc...

2.7 KiB

id title challengeType forumTopicId dashedName
587d7dbb367417b2b2512bab Usare i gruppi di cattura per cercare e sostituire 1 301368 use-capture-groups-to-search-and-replace

--description--

La ricerca è utile. Tuttavia, puoi rendere la ricerca ancora più potente facendole anche cambiare (o sostituire) il testo che corrisponde al pattern.

È possibile cercare e sostituire il testo in una stringa usando .replace() su una stringa. Il primo parametro per .replace() è il pattern che si desidera cercare, sotto forma di espressione regolare. Il secondo parametro è la stringa con cui sostituire la corrispondenza o una funzione per fare qualcosa.

let wrongText = "The sky is silver.";
let silverRegex = /silver/;
wrongText.replace(silverRegex, "blue");

La chiamata replace restituirà la stringa The sky is blue..

Puoi anche accedere ai gruppi di cattura nella stringa di sostituzione con i segni di dollaro ($).

"Code Camp".replace(/(\w+)\s(\w+)/, '$2 $1');

La chiamata a replace restituirà la stringa Camp Code.

--instructions--

Scrivi un'espressione regolare fixRegex utilizzando tre gruppi di cattura che cercheranno ogni parola nella stringa one two three. Quindi aggiorna la variabile replaceText per sostituire one two three con la stringa three two one e assegnare il risultato alla variabile result. Assicurati di utilizzare i gruppi di cattura nella stringa di sostituzione utilizzando la sintassi del segno del dollaro ($).

--hints--

Dovresti usare .replace() per cercare e sostituire.

assert(code.match(/\.replace\(.*\)/));

La tua espressione regolare dovrebbe sostituire la stringa one two three con la stringa three two one

assert(result === 'three two one');

Non dovresti cambiare l'ultima riga.

assert(code.match(/result\s*=\s*str\.replace\(.*?\)/));

fixRegex dovrebbe usare almeno tre gruppi di cattura.

assert(new RegExp(fixRegex.source + '|').exec('').length - 1 >= 3);

replaceText dovrebbe usare stringhe di sotto-corrispondenza tra parentesi (cioè l'ennesima stringa sotto-corrispondente, $n, corrisponde all'ennesimo gruppo di acquisizione).

{
  const re = /(\$\d{1,2})+(?:[\D]|\b)/g;
  assert(replaceText.match(re).length >= 3);
}

--seed--

--seed-contents--

let str = "one two three";
let fixRegex = /change/; // Change this line
let replaceText = ""; // Change this line
let result = str.replace(fixRegex, replaceText);

--solutions--

let str = "one two three";
let fixRegex = /(\w+) (\w+) (\w+)/g; // Change this line
let replaceText = "$3 $2 $1"; // Change this line
let result = str.replace(fixRegex, replaceText);