Регулярное выражение Javascript для сопоставления символов между двумя строками
-
05-07-2019 - |
Вопрос
Я совершенно новичок в регулярном выражении и пытаюсь использовать его для сопоставления значений, чтобы сопоставить их с переменными (javascript просматривает выходные данные в ответеText, сгенерированном из php-скрипта).
На данный момент у меня есть этот код:
if (xmlhttp.readyState==4)
{
document.getElementById("test").innerHTML=xmlhttp.responseText;
cmake = xmlhttp.responseText.match(/Combined_Make =(.*?)</);
}
Вот (часть) вывода, на который он смотрит:
echo "<span class=\"note\">";
echo "Test Output\n";
echo " Combined_Make = $model\n";
echo " Combined_Model = $marque\n";
когда все работает, на самом деле он смотрит на строку вроде:
Combined_Make = GRAND JEEP CHEROKEE<br />
На данный момент я получаю обратно именно это:
'Combined_Make = GRAND JEEP CHEROKEE>, GRAND JEEP CHEROKEE'
Конечно, в данном случае мне нужен просто «GRAND JEEP CHEROKEE» :) — Я также не уверен, почему я получаю именно такой точный результат!
Обратите внимание, что мне нужно будет назначить несколько переменных var$, каждая из которых будет использовать разные начальные строки для совпадения!
Заранее благодарю за любую помощь!
Решение
Пытаться:
/Combined_Make =([^<]+)/
И тогда вам понадобится доступ к первой группе захвата ([1]
):
cmake = xmlhttp.responseText.match(/Combined_Make =([^<]+)/)[1];
Однако вы можете проверить совпадение, прежде чем пытаться получить доступ к первой группе захвата:
var match = xmlhttp.responseText.match(/Combined_Make =([^<]+)/);
cmake = match && match[1];
Другие советы
String.match ()
всегда возвращает массив, даже когда есть только одно совпадение (кроме случаев, когда совпадения нет, тогда он возвращает NULL
)
В случае шаблонов, включающих захваченные подгруппы, String.match ()
всегда будет возвращать полное совпадение с шаблоном с индексом 0, а затем последующие группы соответствия с индексами с 1 по N .
Вот четкий способ продемонстрировать, что
"hello".match( /he(ll)(o)/ );
// yields ["hello", "ll", "o"]