我是regex的新手,我正在尝试使用它来匹配vales,以便将它们映射到变量(javascript查看从php脚本生成的responceText中的输出)。
目前我有这段代码:
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&gt;,GRAND JEEP CHEROKEE'
当然我在这个例子中只是'GRAND JEEP CHEROKEE':) - 我也不确定为什么我要回到那个精确的输出!
请注意,我需要指定多个var $,每个使用不同的开始sting进行匹配!
提前感谢您的帮助!
答案 0 :(得分:1)
尝试:
/Combined_Make =([^<]+)/
然后您将要访问第一个捕获组( [1]
):
cmake = xmlhttp.responseText.match(/Combined_Make =([^<]+)/)[1];
您可能希望在尝试访问第一个捕获组之前测试它是否匹配:
var match = xmlhttp.responseText.match(/Combined_Make =([^<]+)/);
cmake = match && match[1];
答案 1 :(得分:0)
String.match()
总是返回一个数组,即使只有一个匹配项(除非没有匹配项,然后返回NULL
)
对于包含捕获的子组的模式,String.match()
将始终返回索引0处的整个模式匹配,然后返回索引1到 N 的后续匹配组。
这是一个明确的方式来证明
"hello".match( /he(ll)(o)/ );
// yields ["hello", "ll", "o"]