regex de javascript para unir caracteres entre dos cadenas
-
05-07-2019 - |
Pregunta
Soy completamente nuevo en las expresiones regulares, y estoy tratando de usarlo para hacer coincidir los valores con el fin de asignarlos a las variables (javascript mirando la salida en el texto de respuesta generado desde un script php).
En este momento tengo este código:
if (xmlhttp.readyState==4)
{
document.getElementById("test").innerHTML=xmlhttp.responseText;
cmake = xmlhttp.responseText.match(/Combined_Make =(.*?)</);
}
Aquí está la (parte) de la salida que está viendo:
echo "<span class=\"note\">";
echo "Test Output\n";
echo " Combined_Make = $model\n";
echo " Combined_Model = $marque\n";
cuando todo se ejecuta, en realidad está mirando una línea como:
Combined_Make = GRAND JEEP CHEROKEE<br />
En este momento estoy volviendo precisamente esto:
'Combined_Make = GRAND JEEP CHEROKEE > ;, GRAND JEEP CHEROKEE'
Por supuesto, estoy detrás de 'GRAND JEEP CHEROKEE' en este caso :) - ¡Tampoco estoy seguro de por qué estoy recuperando esa salida precisa!
¡Tenga en cuenta que tendré que asignar varias var $, cada una con una cadena de inicio diferente para el partido!
¡Gracias de antemano por cualquier ayuda!
Solución
Prueba:
/Combined_Make =([^<]+)/
Y luego querrás acceder al primer grupo de captura ( [1]
):
cmake = xmlhttp.responseText.match(/Combined_Make =([^<]+)/)[1];
Es posible que desee probar que coincida antes de intentar acceder al primer grupo de captura:
var match = xmlhttp.responseText.match(/Combined_Make =([^<]+)/);
cmake = match && match[1];
Otros consejos
String.match ()
siempre devuelve una matriz, incluso cuando solo hay una coincidencia (excepto cuando no hay ninguna coincidencia, luego devuelve NULL
)
En el caso de patrones que incluyen subgrupos capturados, String.match ()
siempre devolverá la coincidencia del patrón completo en el índice 0, y luego los grupos correspondientes en los índices 1 a N .
Aquí hay una manera clara de demostrar que
"hello".match( /he(ll)(o)/ );
// yields ["hello", "ll", "o"]