JavaScript regex pour faire correspondre les caractères entre deux chaînes
-
05-07-2019 - |
Question
Je suis entièrement nouveau dans regex et j'essaie de l'utiliser pour faire correspondre les valeurs afin de les mapper à des variables (javascript recherchant la sortie dans responceText générée à partir d'un script php).
Pour l'instant, j'ai ce code:
if (xmlhttp.readyState==4)
{
document.getElementById("test").innerHTML=xmlhttp.responseText;
cmake = xmlhttp.responseText.match(/Combined_Make =(.*?)</);
}
Voici la (partie) de la sortie à regarder:
echo "<span class=\"note\">";
echo "Test Output\n";
echo " Combined_Make = $model\n";
echo " Combined_Model = $marque\n";
lorsque tout fonctionne, il s'agit en fait de regarder une ligne du type:
Combined_Make = GRAND JEEP CHEROKEE<br />
En ce moment, je reviens précisément:
'Combined_Make = GRAND JEEP CHEROKEE > ;, GRAND JEEP CHEROKEE'
Bien sûr, je suis après juste 'GRAND JEEP CHEROKEE' dans cet exemple :) - Je ne sais pas non plus pourquoi je récupère cette sortie précise!
Veuillez noter que je devrai assigner plusieurs var $, chacun utilisant un point de départ différent pour le match!
Merci d'avance pour toute aide!
La solution
Essayez:
/Combined_Make =([^<]+)/
Ensuite, vous souhaiterez accéder au premier groupe de capture ( [1]
):
cmake = xmlhttp.responseText.match(/Combined_Make =([^<]+)/)[1];
Vous voudrez peut-être vérifier sa correspondance avant d'essayer d'accéder au premier groupe de capture:
var match = xmlhttp.responseText.match(/Combined_Make =([^<]+)/);
cmake = match && match[1];
Autres conseils
String.match ()
retourne toujours un tableau, même s'il n'y a qu'une seule correspondance (sauf s'il n'y a pas de correspondance, alors il retourne NULL
)
Dans le cas de modèles qui incluent des sous-groupes capturés, String.match ()
renverra toujours la correspondance de modèle complète à l'index 0, puis les groupes correspondants ultérieurs aux index 1 à N .
Voici un moyen clair de démontrer que
"hello".match( /he(ll)(o)/ );
// yields ["hello", "ll", "o"]