Quiero cambiar el valor de una variable en el archivo js usando php, lo que intenté hasta ahora es obtener el contenido del archivo e intentar encontrar una fórmula de expresión regular robusta para cambiar el valor de la variable:
aquí está el contenido del archivo js, teniendo en cuenta que el valor puede ser cualquier valor entre = y ;
// blah blah blah const filename = ""; // it can be filename = ''; or filename = null; or filename = undefined; and so on // blah blah blah Traté de obtener esa línea exacta usando esto: preg_match
/(((\bconst\b)+\s*(\bfilename\b)+\s*)+\s*=)[^\n]*/is luego reemplazó el valor usando esto: preg_replace
/([\"\'])(?:(?=(\\?))\2.)*?\1/is // to get what is between "" or /(?<=\=)(.*?)(?=\;)/is // to get what is between = & ; luego reemplazó toda la línea nuevamente en el archivo usando la primera fórmula: preg_replace
/(((\bconst\b)+\s*(\bfilename\b)+\s*)+\s*=)[^\n]*/is¡Estoy preguntando si tienen un mejor enfoque, porque siento que esto es demasiado trabajo y no estoy seguro de la elegancia y el rendimiento de lo que hice hasta ahora!
NOTA: es un archivo de configuración acumulativo y obtendrá el nombre del archivo del paquete del controlador/método del método php actual >> es un escenario específico.
Puedes usar
preg_replace('~^(\h*const\s+filename\s*=\s*).+~mi', '$1"NEW VALUE";', $string)Vea la demostración de expresiones regulares . Detalles :
^ - inicio de línea (debido a la bandera m )(\h*const\s+filename\s*=\s*) - Grupo 1: cero o más espacios en blanco horizontales ( \h* ), const , uno o más espacios en blanco ( \s+ ), filename , = que se incluye con cero o más espacios en blanco ( \s*=\s* ).+ - uno o más caracteres que no sean de salto de línea tantos como sea posible. El reemplazo contiene $1 , la referencia inversa de reemplazo que inserta el contenido del Grupo 1 en la cadena resultante.
Vea la demostración de PHP :
$string = "// blah blah blah\n\nconst filename = \"\";\n\n// blah blah blah"; echo preg_replace('~^(\h*const\s+filename\s*=\s*).+~mi', '$1"NEW VALUE";', $string);Producción:
// blah blah blah const filename = "NEW VALUE"; // blah blah blahVale, no sé si he entendido bien lo que quieres decir o no, pero aquí he intentado responder a tu pregunta.
Entonces, desea cambiar el valor almacenado en const filename = ""; usando php.
Así es como se ve su archivo javascript:
// blah blah blah const filename = ""; // blah blah blahAhora, tenemos que obtener el valor almacenado en const filename . Entonces, nuestro php debería verse así:
$newFilename = 'this_will_replace_the_value_in_const_filename'; $replace = get_file_contents('path_to_the_js_file'); $replaced = preg_replace('/\s*const\s+filename\s*=\s*\"(.*)\"\s*\;/', "const filename = '$newFilename';", $replace) Ahora la nueva cadena que tiene el valor manipulado de const filename se almacena en $replaced . Puede imprimirlo usando echo, como se muestra a continuación:
//php echo $replaced;Producción:
// blah blah blah const filename = 'this_will_replace_the_value_in_const_filename'; // blah blah blah