RegEx for the Numbers in theousands

时间:2011-11-07 23:45:54

标签: php javascript regex

我正试图从论坛上的用户那里获取帖子数量。

if (td[i].innerHTML.match("Posts: (\d+)")) {
  postCount = RegExp.$1;
}

它有效,但如果一个数字是数千,它只能抓住第一个数字。如何调整以获取整个数字,如1,000?

5 个答案:

答案 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, '')