求正则大神帮我写个正则表达式
简单的正则我会,但这个正则有点麻烦,请大神们指点下<table><tr><td>李四</td><td>男</td><td>VIP</td><td>教师</td></tr>...
简单的正则我会,但这个正则有点麻烦,请大神们指点下
<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>
抱歉 疏忽了 展开
<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>
抱歉 疏忽了 展开
展开全部
<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的相关方法来处理数据,较为方便和清晰
展开全部
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>
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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: ""}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果只是要结果,可以帮你用批处理来实现。
如果限定只能用正则来实现就帮不了你了。
如果限定只能用正则来实现就帮不了你了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<tr>[^<]*?([^<]*?<td[^>]*?>(.*?)</td>){2,4}[^<]*?</tr>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询