在替换中获得替换发生的地方

时间:2018-07-24 06:59:45

标签: javascript

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

000000 是第一个字符串,然后是 000001 ,直到 000009 ,然后它进入 00000a 最多 00000z

我的想法是,我将最后一个模式( z )替换为第一个( 0 ),然后,找到要替换的点,并增加模式中的一个。

我尝试使用的代码:

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

可悲的是,我意识到此函数的返回是被替换的版本,而不是我所追求的。完全合乎逻辑。

我想知道JavaScript中是否有一个函数可以找到所有替换的位置?

3 个答案:

答案 0 :(得分:1)

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

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

如果误解,则忽略。谢谢。

答案 1 :(得分: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 :(得分:1)

我认为没有任何内置方法,但是您可以按以下方式创建自定义逻辑:

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)
}