正则表达式的匹配td内的数据
高洛峰
高洛峰 2016-11-10 11:31:13
0
2
907
<tr>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;1</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;13110581130</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;徐小胖</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;男</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;2013</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;计算机科学与技术</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;</td>
      </tr>

      <tr>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;2</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;13110581131</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;兴小胖</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;男</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;2013</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;计算机科学与技术</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;</td>
        <td scope="col" align="center" valign="middle" nowrap>&nbsp;</td>
        <td scope="col" align="left" valign="middle" nowrap>&nbsp;</td>
      </tr>

我想匹配td内的数据,比如 徐小胖,男

/<td scope="col" align=.*<\/td>/g

上面的正则还可以再优化吗?能更精确的抓取数据吗?谢谢指点


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
学霸

为什么不用xpath呢?
如果是我,我会这样写

str = ' 徐小胖';
re = /]*>(?: )?(.*)/
str.match(re, function(all, m) {
    consolesole.log(all);
    console.log(m);
});


三叔

你的问题,一个正则没办法解决。

因为 JS 的正则,加 全局匹配(//g)后,.match() 的结果没法取得 子项结果()submatches) 的结果,说以使用了 .replace 来曲线实现获取 子项结果。

你的文档已经是html了,最好的办法是动态生成虚拟的 js的dom的树,这样操作更灵活

function matchInfo(str){
    var result = [];
    var cache = [];
    
    //tr 分组,replace 是为了获取 ([\S\s]*?)中的 ([\S\s]*?)部分。
    str.replace(/([\S\s]*?)/gi, function($0, $1){
        cache.push($1);
        result.push([]);
        return $0;
    }, "");
    
    //处理每个tr
    for( var i = 0 ; i ([\S\s]*?)/gi, function($0, $1){
            result[i].push($1.replace(" ", ""));
        }, "");
    }

    return result;
    
};


var str = $("pre").text(); //本页,F12,提取你提问部分的字符
var result = matchInfo(str);

console.table(result); //打印结果
/*
   会输出分析的结果
*/

console.log("徐小胖,男>", result[0][2], result[0][3]);
/*
    徐小胖,男> 徐小胖 男
*/

58207cc1bb2c8.jpg

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板