【问题标题】:Replace comma with period in string only if it is a decimal number [duplicate]仅当它是十进制数字时,才用字符串中的句点替换逗号 [重复]
【发布时间】:2023-03-09 10:54:01
【问题描述】:

我需要扫描一个字符串并检查是否有小数(数字)。如果是这样,请将它们替换为逗号。示例:

var string = "This is the number 9,5 but problem is if we have e.g. 10, 11."

使用最简单的解决方案:

string = string.replace(/,/g, '.')

将替换字符串中的所有逗号。

所以我需要一个正则表达式来检查, 的前一个字符和下一个字符是否是数字\d,然后才用. 替换,

我实现的是通过正则表达式获得这些数字:

\d(\,)\d

但我不知道如何使用(非)捕获组来仅提取 javascript 替换的逗号。或任何其他方式。

【问题讨论】:

  • 由于 JS 不支持零长度后视,你最好先捕获一组数字,然后再放回去。
  • 我总是想知道什么混蛋会否决这样的问题。 SO中应该有一个强制性的“说明你反对的理由”字段。

标签: javascript regex


【解决方案1】:

捕获一个数字,匹配一个逗号,向前查找另一个数字,并替换为捕获的组加上一个句点:

var string = "This is the number 9,5 but problems is if we have e.g. 10, 11."
console.log(
  string.replace(/(\d),(?=\d)/g, '$1.')
);

【讨论】:

  • 该死的,我写了一条评论来精确地表达这种效果,而你同时发布了一个完整的答案......:P
  • @kai-noack 如果您使用捕获组,您自己的正则表达式也会起作用。例如。 string.replace(/(\d),(\d)/g, '$1.$2');
  • /(\d),(\d)/g 实际上比 /(\d),(?=\ d)/g(128步)
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 2023-02-04
  • 2017-06-17
  • 2017-07-13
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多