【问题标题】:Javascript Regex: replacing the last dot for a commaJavascript Regex:用逗号替换最后一个点
【发布时间】:2011-06-18 03:20:32
【问题描述】:

我有以下代码:

var x = "100.007"
x = String(parseFloat(x).toFixed(2));
return x
=> 100.01

这非常好用,就像我想要的那样。我只想要一个小小的补充,类似于:

var x = "100,007"
x.replace(",", ".")
x.replace
x = String(parseFloat(x).toFixed(2));
x.replace(".", ",")
return x
=> 100,01

但是,此代码将替换第一次出现的“,”,我想在其中捕获最后一个。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript regex pattern-matching currency


    【解决方案1】:

    你可以用正则表达式来做到这一点:

    x = x.replace(/,([^,]*)$/, ".$1");
    

    该正则表达式匹配一个逗号,后跟不包括逗号的任意数量的文本。替换字符串只是一个句点,后面是原始最后一个逗号之后的任何内容。字符串中它前面的其他逗号不会受到影响。

    现在,如果您真的要转换“欧洲风格”格式的数字(因为没有更好的术语),您还需要担心“。”在“美国风格”数字有逗号的地方出现字符。我想你可能只想摆脱它们:

    x = x.replace(/\./g, '');
    

    当您对字符串使用“.replace()”函数时,您应该了解它返回修改后的字符串。但是,它不会修改 original 字符串,因此如下语句:

    x.replace(/something/, "something else");
    

    对“x”的值没有影响。

    【讨论】:

    • 在将逗号转换为 1 之前一定要去掉句号字符,否则你会得到一个完全不同的数字!那里必须有一个正则表达式,它仅在句点后跟逗号时才转换句点,并且仅在逗号前面有句点时才转换逗号……想想我刚刚发现我在午餐时间做什么……
    【解决方案2】:

    您可以使用lastIndexOf() 函数找到最后一次出现的, 并替换它。

    另一种方法是使用带有行尾标记的正则表达式:

    myOldString.replace(/,([^,]*)$/, ".$1");
    

    【讨论】:

    • 这行得通吗?第一个 ',' 后面的某处也会有一个行尾。
    【解决方案3】:

    您可以使用lastIndexOf 查找, 的最后一次出现。然后您可以使用slice, 之前和之后的部分与. 放在一起。

    【讨论】:

    • 正则表达式不是更好吗,因为它是我正在寻找的模式匹配?
    【解决方案4】:

    您可以使用正则表达式。你想替换最后一个',',所以基本思路是替换后面没有','的','。

    x.replace(/,([^,]*)$/, ".$1");
    

    会返回你想要的:-)。

    【讨论】:

      【解决方案5】:

      你不必担心它是否是最后一个“.”,因为只有一个。 JavaScript 不会在内部使用逗号或点分隔的集合来存储数字。

      【讨论】:

      • 第一条规则是永远不要相信输入。所以我很担心 :) 永远感谢您的回答。
      • 输入无关紧要——您在String(parseFloat(n).toFixed(2)) 的输出上运行replace,它将始终返回nil 的字符串表示形式或带有一个小数点和零的数字逗号。 JavaScript 永远不会将数字转换为带有逗号分隔符的字符串,除非您编写了专门的方法。
      猜你喜欢
      • 2011-09-14
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2015-06-19
      相关资源
      最近更新 更多