求正则大神帮我写个正则表达式

简单的正则我会,但这个正则有点麻烦,请大神们指点下
<table>
<tr>
<td>李四</td>
<td>男</td>
<td>VIP</td>
<td>教师</td>
</tr>
<tr>
<td>张三</td>
<td>男</td>
<td>VIP</td>
</tr>
<tr>
<td>王二</td>
<td>女</td>
</tr>
</table>
我希望用正则提取出结果
显示为如下
---------------------------
姓名-性别-等级-职业
李四-男-VIP-教师
张三-男-VIP-0
王二-女-0-0
---------------------------
每个人填写的信息可能都不全面,姓名每个人都有,性别每个人都有,但有的人不是vip,有的人没有填写职业。所以系统就没有生成对应的句子

这个接口是别人提供给我们的,我们无法要求对方修改接口,只能自己用正则来解决,请大家帮忙一下
另外补充下, 我获取到结果后,通常是 根据下表去获取结果,如果上面的这样来看的,
就不能单纯的用小标去取结果了,因为 可能 对方 写了【职业】 但没有写【vip等级】

arr[3] 获取的 可能就是 职业了

有什么办法 实现 arr.zhiye 来获取 职业吗
我用的 javascript 来做正则匹配的

我上面的代码有点问题,
对应的td 是有 class 属性的

比如 性别 的class 属性是 xingbie
职业的class 是 zhiye

<table>
<tr>
<td class=name>李四</td>
<td class=xingbie>男</td>
<td class=dengji>VIP</td>
<td class=zhiye>教师</td>
</tr>
<tr>
<td class=name>张三</td>
<td class=xingbie>男</td>
<td class=dengji>VIP</td>
</tr>
<tr>
<td class=name>王二</td>
<td class=xingbie>女</td>
</tr>
</table>

抱歉 疏忽了
最新回答
旧情人怎能变知己

2024-05-09 05:30:35


<script type="text/javascript">
window.onload=function(){
var aaa=document.getElementById("aaa").innerHTML;
//aaa 是得到的数据源,你那里可以是服务器后台的返回

var bbb=document.getElementById("bbb");
bbb.innerHTML=aaa;

table = bbb.getElementsByTagName("table")[0];
var info="";    
for (var i = 0; i<table.rows.length;i++){
    var name;
    var sex;
    var job = "0";
    var vip = "0";
    for (var j = 0; j < table.rows[i].cells.length; j++){
        vv = table.rows[i].cells[j];
        type = vv.className;

        if(type == 'name'){
            name = vv.innerHTML;
        }else if(type == 'xingbie'){
            sex = vv.innerHTML;
        }else if(type == 'dengji'){
            vip = vv.innerHTML;
        }else if(type == 'zhiye'){
            job = vv.innerHTML;
        }
    } 
    
    info += name+'-'+sex+'-'+vip+'-'+job+'</br>';
}


document.getElementById("ccc").innerHTML = info;
}
</script>
<div id="aaa" style="display:none;">
<table>
<tr>
<td class=name>李四</td>
<td class=xingbie>男</td>
<td class=dengji>VIP</td>
<td class=zhiye>教师</td>
</tr>
<tr>
<td class=name>张三</td>
<td class=xingbie>男</td>
<td class=dengji>VIP</td>
</tr>
<tr>
<td class=name>王二</td>
<td class=xingbie>女</td>
</tr>
</table> 
</div>

<div id="bbb" style="display:none;"></div>
<div id="ccc" ></div>

因为要处理的格式为一个标准的html table,用正则处理起来既麻烦又效率不高,可以尝试用其他方法,比如像这样,把得到的结果放到一个隐藏的div中,转换为html数据,在通过html的相关方法来处理数据,较为方便和清晰

平山渡

2024-05-09 13:31:56

Javascript正则表达式:<tr><td\s+class=name>(.*?)<\/td><td\s+class=xingbie>(.*?)<\/td>(<td\s+class=dengji>(.*?)<\/td>)?(<td\s+class=zhiye>(.*?)<\/td>)?<\/tr>

完整的Javascript程序如下:

<script type="text/javascript">
   var str="<table><tr><td class=name>李四</td><td class=xingbie>男</td><td class=dengji>VIP</td><td class=zhiye>教师</td></tr><tr><td class=name>张三</td><td class=xingbie>男</td><td class=dengji>VIP</td></tr><tr><td class=name>王二</td><td class=xingbie>女</td></tr></table>";
   var regex=/<tr><td\s+class=name>(.*?)<\/td><td\s+class=xingbie>(.*?)<\/td>(<td\s+class=dengji>(.*?)<\/td>)?(<td\s+class=zhiye>(.*?)<\/td>)?<\/tr>/ig;
   var regex1=/<tr><td\s+class=name>(.*?)<\/td><td\s+class=xingbie>(.*?)<\/td>(<td\s+class=dengji>(.*?)<\/td>)?(<td\s+class=zhiye>(.*?)<\/td>)?<\/tr>/i;
   var arr=str.match(regex);
   for(var i=0;i<arr.length;i++){
    var arr1=regex1.exec(arr[i]);
  var s1="",s2="";
  if(arr1[4]==null||arr1[4]=="") s1="0";
  else s1=arr1[4];
  if(arr1[6]==null||arr1[6]=="") s2="0";
  else s2=arr1[6];
  alert(arr1[1]+"-"+arr1[2]+"-"+s1+"-"+s2);
 }
  </script>
余安

2024-05-09 20:44:39

var s = "你的字符串";
var reg1 = /<tr>(?:(?!<\/tr>).)*<\/tr>/gi;
var reg2 = /<td class=([^>]+)>((?:(?!<\/td>).)*)<\/td>/gi
var result = [];
while(a1 = reg1.exec(s)){
    var obj = {};
    while(a2 = reg2.exec(a1[0])){
        obj[a2[1]] = a2[2];            
    }
    result.push(obj); 
}
//运行结果是 result 集合,单个元素是 {dengji : "", name : "", xingbie: "", zhiye: ""}
空城已无她

2024-05-09 10:03:12

如果只是要结果,可以帮你用批处理来实现。
如果限定只能用正则来实现就帮不了你了。
浅夏忆梦

2024-05-09 15:48:11

<tr>[^<]*?([^<]*?<td[^>]*?>(.*?)</td>){2,4}[^<]*?</tr>