【问题标题】:replace all comma seperated numbers to dot seperated numbers in string in javascript将所有逗号分隔的数字替换为javascript中字符串中的点分隔数字
【发布时间】:2018-01-16 13:46:04
【问题描述】:

假设有带数字的字符串,例如, test() test 12,01% test (12,4) 12.3 s 2 some other text, other text, 2,text

我需要将带逗号的数字替换为带点的相同数字,并且不要更改任何其他内容。所以字符串会变成

test() test 12.01% test (12.4) 12.3 s 2 some other text, other text, 2,text

我尝试过这样的事情:

var newstr = str.replace(/^\d+,\d+$/g, "\1.\2");

或 var newstr = str.replace(^\d*\,?\d+$/g, "\1.\2");

  • 我认为这应该匹配任何带逗号的数字:^\d*\,?\d+$

【问题讨论】:

  • /(\d+),(\d+)/g
  • var newstr = str.replace( /(\d),(\d)/g, "\1.\2"); 喜欢这个?您不需要添加锚点或量词,但您必须定义捕获组。
  • 美元在被替换的字符串中没有反斜杠
  • @Max:我总是忘记!

标签: javascript regex


【解决方案1】:

您可以这样做并捕获 2 个组:

(\d+),(\d+)

说明

  • 组 1:捕获 1 个或多个数字(\d+)
  • 匹配逗号,
  • 第 2 组:捕获 1 个或多个数字(\d+)

var str = "test() test 12,01% test (12,4)  12.3 s 2 some other text, other text, 2,text";
var newstr = str.replace(/(\d+),(\d+)/g, "$1.$2", ".");
console.log(newstr);

【讨论】:

  • 你不需要匹配整个数字来替换逗号。
  • @tiagodws 没错。在这种情况下,(\d+),(\d+)(\d),(\d) 稍快。
  • 很高兴知道。感谢您的解释!仅供参考,您在哪里找到这些信息?
  • 如果字符串中包含大整数,结果可能不同。
  • \b(\d+),(\d) 更快,但这是假设数字前面没有字母或下划线
【解决方案2】:
yourString.replace(/(\d),(\d)/g, "$1.$2")

这将匹配数字之间的每个逗号。

【讨论】:

    【解决方案3】:

    试试这个:

    var newstr = str.replace( /\b(\d+),(\d+)\b/g, "$1.$2");
    

    在其中设置\b 单词边界的目的是确保您不会意外匹配与字母相邻的数字。由于您的示例的一部分包含文本 2,text,因此可能会出现一些不寻常的文本,例如 2,1text,在这种情况下,您可能打算替换逗号加句号。

    【讨论】:

    • 不完全是,您在替换的字符串中使用$1.$2(JS 奇怪地认为字符串中的反斜杠;因此对于 RegExes,它要求您在替换的版本中使用该格式)
    • 这与第一次出现不匹配,即 str = "2,3 test e 2, mis 2.3 4,54 tes"
    • 我认为(对于当前要求)您不必检查数字之前或之后的内容。
    • @MarouenMhiri 你是对的 - 谢谢。更新了我的答案以包括数字出现在字符串开头或字符串的情况。
    • 第四只鸟有最佳答案
    猜你喜欢
    • 2018-07-19
    • 2013-09-20
    • 2012-01-17
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2021-12-18
    相关资源
    最近更新 更多