¿Cómo regex reemplaza una cadena de consulta con 2 palabras coincidentes?

Tengo una URL y quiero reemplazar la cadena de consulta. Por ejemplo

www.test.com/is/images/383773?wid=200&hei=200

Quiero hacer coincidir el wid=y hei=y los números no tienen que ser 200para reemplazar todo, por lo que debería verse así.

Previsto www.test.com/is/images/[email protected]_dtImage

Así que intenté hacerlo, pero solo reemplazó la coincidencia weiy hei.

const url = "www.test.com/is/images/383773?wid=200&hei=200"

url.replace(/(wid)(hei)_[^\&]+/, "@HT_dtImage")

Answer

Puede hacer coincidir wid= o hei= hasta el siguiente ampersand opcional y luego eliminar esas coincidencias y luego agregarlas @HT_dtImageal resultado.

\b(?:wid|hei)=[^&]*&?

El patrón coincide:

  • \b Un límite de palabra para evitar una coincidencia de palabra parcial
  • (?:wid|hei)=Grupo de no captura, emparejar wido heiseguido de=
  • [^&]*&?Haga coincidir 0+ veces un carácter que no sea &, y luego haga coincidir un carácter opcional&

Vea una demostración de expresiones regulares .

let url = "www.test.com/is/images/383773?wid=200&hei=200"
url = url.replace(/\b(?:wid|hei)=[^&]*&?/g, "") + "@HT_dtImage";
console.log(url)

Simplemente usaría la división de cadenas aquí:

var url = "www.test.com/is/images/383773?wid=200&hei=200";
var output = url.split("?")[0] + "[email protected]_dtImage";
console.log(output);

Si solo desea orientar las cadenas de consulta que tienen tanto las claves widcomo hei, utilice un enfoque de expresiones regulares:

var url = "www.test.com/is/images/383773?wid=200&hei=200";
var output = url.replace(/(.*)\?(?=.*\bwid=\d+)(?=.*\bhei=\d+).*/, "[email protected]_dtImage");
console.log(output);

Puede hacer uso de mirar alrededor usando expresiones regulares /\?.*/

ingrese la descripción de la imagen aquí

const url = 'www.test.com/is/images/383773?wid=200&hei=200';

const result = url.replace(/\?.*/, '[email protected]_dtImage');
console.log(result);

Tratar url.replace(/\?.*/, "[email protected]_dtImage")