javascript regex per abbinare i caratteri tra due stringhe
-
05-07-2019 - |
Domanda
Sono completamente nuovo su regex e sto provando a usarlo per abbinare i valori al fine di mapparli su variabili (javascript guardando l'output in responceText generato da uno script php).
Al momento ho questo codice:
if (xmlhttp.readyState==4)
{
document.getElementById("test").innerHTML=xmlhttp.responseText;
cmake = xmlhttp.responseText.match(/Combined_Make =(.*?)</);
}
Ecco la (parte) dell'output che sta guardando:
echo "<span class=\"note\">";
echo "Test Output\n";
echo " Combined_Make = $model\n";
echo " Combined_Model = $marque\n";
quando tutto funziona, in realtà sta guardando una linea come:
Combined_Make = GRAND JEEP CHEROKEE<br />
Al momento sto tornando esattamente questo:
'Combined_Make = GRAND JEEP CHEROKEE > ;, GRAND JEEP CHEROKEE'
Certo che sto cercando solo 'GRAND JEEP CHEROKEE' in questo caso :) - Non sono inoltre sicuro del motivo per cui sto ottenendo quel risultato preciso!
Nota che dovrò assegnare più var $, ognuna usando una puntura di inizio diversa per la partita!
Grazie in anticipo per qualsiasi aiuto!
Soluzione
Prova:
/Combined_Make =([^<]+)/
E poi vorrai accedere al primo gruppo di acquisizione ( [1]
):
cmake = xmlhttp.responseText.match(/Combined_Make =([^<]+)/)[1];
Potresti voler verificare che corrisponda prima di provare ad accedere al primo gruppo di acquisizione:
var match = xmlhttp.responseText.match(/Combined_Make =([^<]+)/);
cmake = match && match[1];
Altri suggerimenti
String.match ()
restituisce sempre un array, anche quando c'è una sola corrispondenza (tranne quando non c'è corrispondenza, quindi restituisce NULL
)
Nel caso di motivi che includono sottogruppi acquisiti, String.match ()
restituirà sempre l'intera corrispondenza del motivo all'indice 0, quindi i gruppi di corrispondenza successivi dagli indici da 1 a N .
Ecco un modo chiaro per dimostrarlo
"hello".match( /he(ll)(o)/ );
// yields ["hello", "ll", "o"]