【问题标题】:Get the point where the replace occurred in a replace获取replace中发生replace的点
【发布时间】:2018-12-31 16:58:35
【问题描述】:

我正在尝试创建一个字符串增加函数,该函数将接受一个字符串并将其提升一个,例如:

000000 是第一个字符串,然后是 000001,直到 000009 再到 00000a高达 00000z

我的想法是,我将用第一个 (0) 替换最后一个模式 (z),然后,获取它被替换的点并将其增加模式中的一个。

我尝试使用的代码:

cycler(string) {
   //string="00000z"
   var pos = string.replace('z', '0');
   console.log(pos);
}

我很遗憾地意识到这个函数的返回是被替换的版本,而不是我想要的。这完全合乎逻辑。

我想知道 JavaScript 中是否有用于查找所有替换的功能的函数?

【问题讨论】:

标签: javascript


【解决方案1】:

这样可以增加字符串。 首先你找到你想改变的地方。然后你改变它

const range = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];


cycler = function(string) {   
   const pos = string.match(/[0-9a-z]z/ )
   return pos === null ? string.length - 1 : pos.index
}

inc =  function(string,pos) {   

  let rangeIndex  = range.indexOf(string[pos]);
  rangeIndex++;
  let arr = string.split("");
  arr[pos] = range[rangeIndex];
 
  return arr.join("");
}

var string = '00002z';
const  pos = cycler(string);
alert(inc(string,pos))

【讨论】:

    【解决方案2】:

    如果我理解正确,您想替换所有出现的地方。

    cycler(string) {
       //string="00000z"
       var pos = string.replace(/z/g, '0');
       console.log(pos);
    } 
    

    如有误解请忽略。谢谢。

    【讨论】:

    • 我猜你看错了。标题说“Get the point where the replace occurred in a replace”和问题“...找到所有替换的位置?”,但无处可去询问如何替换所有出现
    【解决方案3】:

    我认为没有任何内置方法可以解决此问题,但您可以按如下方式创建自定义逻辑:

    var orgstr = '000000';
    
    
    
    var arr = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
    
    
    
    function getNextStr(str) {
      var count = (str.match(/0/g) || []).length;
      var rStr = ""
    
      var found = str.replace(/0/g, '');
      var next = getNext(found);
      var nexIn = arr.indexOf(found) + 1;
      if (next.length != found.length) {
        rStr = str.slice(0, count - 1) + next;
      } else {
        rStr = str.slice(0, count) + next;
      }
    
      return rStr;
    }
    
    function getNext(fou) {
      var str = '';
      var nextTobeGrown = true;
      for (var i = fou.length - 1; i >= 0; i--) {
        var x = fou.substring(i + 1, i);
        var ind = arr.indexOf(x);
        if (nextTobeGrown) {
    
          if (ind + 1 < arr.length) {
            str += arr[ind + 1];
            nextTobeGrown = false;
          } else {
            str += arr[0]
          }
        } else {
          str += x;
        }
    
      }
    
    
      //console.log(str)
      if (nextTobeGrown) {
        str += arr[0];
      }
      return str.split("").reverse().join("");;
    }
    
    var rst;
    for (var i = 0; i < 160; i++) {
      var org = i == 0 ? orgstr : rst;
      rst = getNextStr(org);
      console.log(rst)
    }

    【讨论】:

    • 看看,你可以将数组从 a 替换到 z 或任何你想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2012-04-28
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多