Php 以千为单位的数字的RegExp

Php 以千为单位的数字的RegExp,php,javascript,regex,Php,Javascript,Regex,我试图从一个论坛的用户那里获取帖子数量 if (td[i].innerHTML.match("Posts: (\d+)")) { postCount = RegExp.$1; } 它是有效的,但是如果一个数字有几千个,它只抓取第一个数字。如何调整它以获取整数,例如1000?我从未见过使用正则表达式的这种方式。但这应该做到: /Posts: (\d+(?:,\d+)?)/ 但这与1000000不匹配,如果您想涵盖所有情况,请将?更改为*: /Posts: (\d+(?:,\d+)*)/

我试图从一个论坛的用户那里获取帖子数量

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

它是有效的,但是如果一个数字有几千个,它只抓取第一个数字。如何调整它以获取整数,例如1000?

我从未见过使用正则表达式的这种方式。但这应该做到:

/Posts: (\d+(?:,\d+)?)/
但这与
1000000
不匹配,如果您想涵盖所有情况,请将
更改为
*

/Posts: (\d+(?:,\d+)*)/

我从未见过这种使用正则表达式的方法。但这应该做到:

/Posts: (\d+(?:,\d+)?)/
但这与
1000000
不匹配,如果您想涵盖所有情况,请将
更改为
*

/Posts: (\d+(?:,\d+)*)/

这应该可以做到:

Posts: (\d*,?\d+)
编辑:如果要匹配1000000(如Felix Kling演示),则需要为上部设置重复捕获组:

Posts: ((?:\d+,)*\d+)

这应该可以做到:

Posts: (\d*,?\d+)
编辑:如果要匹配1000000(如Felix Kling演示),则需要为上部设置重复捕获组:

Posts: ((?:\d+,)*\d+)

如果他们使用的是逗号格式,如100000000,那么下面的正则表达式应该可以很好地工作:

$posts = "Posts: 10,000,000";
$pat = "/Posts: (\d+(?:,\d{3})*)/";
preg_match($pat, $posts, $matches);
$post_count = $matches[1];

如果他们使用的是逗号格式,如100000000,那么下面的正则表达式应该可以很好地工作:

$posts = "Posts: 10,000,000";
$pat = "/Posts: (\d+(?:,\d{3})*)/";
preg_match($pat, $posts, $matches);
$post_count = $matches[1];

如果要捕获逗号,只需将模式更改为:

Posts: (\d+(,\d{3})*)
如果你不想要逗号,你需要一个额外的步骤。有人帮我解决JS语法问题,但我想可能是:

postCount = RegExp.$1.replace(/,/g, '')

如果要捕获逗号,只需将模式更改为:

Posts: (\d+(,\d{3})*)
如果你不想要逗号,你需要一个额外的步骤。有人帮我解决JS语法问题,但我想可能是:

postCount = RegExp.$1.replace(/,/g, '')

为工厂做更多的准备。。。如果您想使用数千个分隔符测试数字,您可以执行以下操作:

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;
  }
}

为工厂做更多的准备。。。如果您想使用数千个分隔符测试数字,您可以执行以下操作:

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;
  }
}

本地化是一个问题,还是将始终使用逗号作为千位分隔符对值进行格式化?本地化是一个问题,还是将始终使用逗号作为千位分隔符对值进行格式化?您的正则表达式缺少一个结束符
感谢您捕捉到这一点。我犯了愚蠢的复制/粘贴错误。你的正则表达式缺少一个结束符
谢谢你捕捉到这个错误。我犯了愚蠢的复制/粘贴错误。我认为第二个“+”应该是“*”。你也希望能够匹配“Posts:123”。很好,很抱歉。我认为第二个“+”应该是一个“*”。你也希望能够匹配“Posts:123”。很好,很抱歉。