【问题标题】:Regex to replace a portion of a string正则表达式替换字符串的一部分
【发布时间】:2014-10-22 19:14:26
【问题描述】:

我有一张图表,在 Y 轴上有一些数字,例如 40000000、7000000、20000000。

我想使用正则表达式将最后六个“0”数字替换为“M”

示例

40000000 should be 40M
7000000  should be 7M
20000000 should be 20M

如果数字小于999999,则应替换为字母'K'

4000 should be 4K

有人可以帮我解决这个正则表达式吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    注意someString 必须是字符串,而不是数字。

    someString.replace(/0{6}$/, "M").replace(/0{3}$/, "K");
    

    【讨论】:

      【解决方案2】:

      未经移动测试,但尝试:

      /0{6}$/
      

      完整代码:

      '4000000'.replace(/0{6}$/,'M')
      

      解决数以千计的问题:

      '4000000'.replace(/0{6}$/,'M').replace(/0{3}$/,'K')
      

      【讨论】:

        【解决方案3】:

        Working Sample for M

        使用的正则表达式是/0{6}\b/g。请注意,$ 不用于检查字符串的结尾,但使用了单词边界字符 \b,这使得它可以在其他建议失败的更广泛的情况下工作。

        您可以非常轻松地为K 自己推导出一个类似的,然后将其作为练习:)

        完成后,您可以检查您的数据是否与第一个正则表达式匹配,如果匹配则替换。如果没有,则测试第二个正则表达式(对于 K),如果找到则替换。

        附注我用来发布解决方案(Regex 101) 的服务是一项非常有用的服务,是原型设计和学习正则表达式的完美工具。

        http://jsh.zirak.me/2klw //只有当你仍然不知道怎么做时才看这个。

        如果你不知道怎么做,这个剧透包含解决方案

        【讨论】:

          【解决方案4】:

          另一种产生所需输出的方法:

          function getRepString (rep) {
            rep = rep+''; // coerce to string
            if (rep < 1000) {
              return rep; // return the same number
            }
            if (rep < 10000) { // place a comma between
              return rep.charAt(0) + ',' + rep.substring(1);
            }
            // divide and format
            return (rep/1000).toFixed(rep % 1000 != 0)+'k';
          }
          

          我不认为这个答案。这个答案是 CMS 在此处找到的重复问题:

          How to format numbers similar to Stack Overflow reputation format

          【讨论】:

          • 如果您没有获得荣誉,那么将其设为社区 Wiki 以避免从中获得代表怎么样? ;)
          猜你喜欢
          • 2017-11-27
          • 1970-01-01
          • 1970-01-01
          • 2011-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多