0

我的 html 喜欢:

<dl class="resume_pro">  
    <dt>    <h3>personal infomation</h3>  </dt>  
    <dd class="pro_lf"> 
        <span class="rt_title">sex:male | age:26 </span>
        <div class="clear"></div> 
        <br>phone:123456789<a href="###" class="send" id="sendsms" style="display:none">send message</a><br>   E-mail:name@abc.com <br>  
    </dd>
    <div class="clear"></div>
</dl>

我的解析器代码:

var $ = cheerio.load(html);
found = $('*:contains("phone:")').last();

找到的会得到“ <dd class="pro_lf"> </dd>

然后 found.text() 将得到“ sex:male | age:26 phone:123456789send message E-mail:name@abc.com

但是我怎样才能得到每个电话和电子邮件?

我想写一个常用的代码

所以我只是用来 $('*:contains("phone:")')搜索我的信息,而不是使用标签名或类名

我将循环元素以找出每个最后一个节点并将内容获取到解析器

我需要一些帮助。

4

2 回答 2

3

可能有上千种方法可以做到这一点,但这里有一种使用正则表达式的简洁方法(我不是其中的大师,但这是我的看法):

var $ = cheerio.load(html);
found = $('*:contains("phone:")').last();

//Find phone number
var phoneNumber = str.match(/phone\:\d+/)[0].match(/\d+$/);

match找到字符串"phone:123456789"并将其返回到只有一个元素的数组中。然后我们拆分"phone:"出现的字符串,留下数组["", "123456789"]

要扩展 RegEx /phone\:\d+/

/                   start of regex
 phone\:            match the string literal, "phone:"
 \d+                match 1 or more digits following "phone:"
/                   end of regex

对于/\d+$/

/                   start of regex
 \d+                match 1 or more digits
 $                  ...at the end of the string
/                   end of regex

运行后,phoneNumber将是字符串"123456789"

于 2014-03-04T20:44:25.750 回答
0

我应该使用它来遍历每个元素:

found.contents().each(function() {
.....
});

然后您可以在循环中使用正则表达式来获取电话号码。

于 2014-03-10T01:33:22.820 回答