我正试图从论坛上的用户那里获取帖子数量。
if (td[i].innerHTML.match("Posts: (\d+)")) {
postCount = RegExp.$1;
}
它有效,但如果一个数字是数千,它只能抓住第一个数字。如何调整以获取整个数字,如1,000?
答案 0 :(得分:2)
我从未见过这种使用正则表达式的方法。但是应该这样做:
/Posts: (\d+(?:,\d+)?)/
但这与1,000,000
不匹配,如果您想要涵盖所有情况,请将?
更改为*
:
/Posts: (\d+(?:,\d+)*)/
答案 1 :(得分:1)
为工厂提供更多支持...如果你想用数千个分隔符测试数字,你可以做类似的事情:
var matches = td[i].innerHTML.match(/\d{1,3}(,\d{3})*/);
postCount = matches? matches[0] : 0;
使用textContent / innerText可能比innerHTML更好,因为您可能想要删除标记。一个简单的功能可以是:
function getText(el) {
if (typeof el.textContent == 'string') {
return el.textContent;
} else if (typeof el.innerText == 'string') {
return el.innerText;
}
}
答案 2 :(得分:0)
这应该可以解决问题:
Posts: (\d*,?\d+)
编辑:如果您想匹配1,000,000(如Felix Kling演示),您需要在上半部分重复捕获组:
Posts: ((?:\d+,)*\d+)
答案 3 :(得分:0)
如果他们使用逗号编号格式(例如1,000,000,000),那么以下正则表达式应该可以正常工作:
$posts = "Posts: 10,000,000";
$pat = "/Posts: (\d+(?:,\d{3})*)/";
preg_match($pat, $posts, $matches);
$post_count = $matches[1];
答案 4 :(得分:0)
如果要捕获逗号,只需将模式更改为:
Posts: (\d+(,\d{3})*)
如果您不想要逗号,则需要额外的步骤。有人用JS语法帮助我,但我想它可能是:
postCount = RegExp.$1.replace(/,/g, '')