recherche

Maison  >  Questions et réponses  >  le corps du texte

正则表达式的匹配td内的数据

<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

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


高洛峰高洛峰2940 Il y a quelques jours902

répondre à tous(2)je répondrai

  • 欧阳克

    欧阳克2016-11-10 11:32:12

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

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


    répondre
    0
  • 三叔

    三叔2016-11-10 11:31:51

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

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

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

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

    répondre
    0
  • Annulerrépondre