如何在跳过x个字符后打印特定字符串?

时间:2016-04-30 23:46:06

标签: javascript function

我想从下面的文字中打印hey。我需要创建一个从文本中跳过一定数量字符的函数来打印hey中的字母。因此,在这种情况下,它会跳过0个字符来打印h,然后跳过2个字符(a& b)来打印e,并跳过1个字符({{ 1}})打印z

y

这是我的代码到目前为止,我找到了带有if语句的数字,但我不知道如何告诉它跳过那么多字符并打印下面的字符。

3 个答案:

答案 0 :(得分:3)

尝试以下功能。函数中注释的解释。

var decode = function (text) {
  var output = "";
  var i = 0;
  while (i < text.length) {
    if (/\D/.test(text[i])){  // if character at current index is not a number
      output += text[i];      // add it to output
    } else {                  // otherwise 
      i += +text[i];          // add that number to current index in order
    }                         // to skip that many characters
    i++;
  };
  return output;
};

decode("0h2abe1zy");     // "hey"
decode("3jyhf0i2ikn0d"); // "find"
decode("0He3abcl14lo2gh 3zxyw1ior5abcdeld"); // "Hello world"

请注意,我使用正则表达式来测试当前字符是否为非数字字符。在下一行中,我使用一元加运算符将字符串转换为数字,以便将其添加到i

       i += +text[i];

顺便说一句,我已经假设您不希望输出中的任何数字。如果你确实希望能够输出数字,你可以假设跳过的字符后面的任何字符总是输出,即使它是一个数字本身(所以decode("010203")会输出"123" )。 else案例的一个小改动将处理:

} else {                  // otherwise
  i += +text[i] + 1;      // add that number to current index and
  output += text[i];      // immediately output the next character
}

哪会给:

decode("1aW0e3abc'0r1ae2aa 0n1uum4zaefb0e1sr1i 2is10!") // "We're number 1!"

或者将其与@Oriol excellent answer结合使用,以便一次跳过超过9个字符。

答案 1 :(得分:2)

如果与@nnnnnn的答案不同,您希望将相邻数字解析为整数,则可以使用

function decode(string) {
    var filtered = [],
        skip = 0;
    for(var index = 0; index < string.length; index++) {
        var character = string[index];
        if(character >= '0' && character <= '9') // It's a digit
            skip = skip * 10 + (+character);
        else if (skip) index += skip-1, skip = 0;
        else filtered.push(character);
    }
    return filtered.join("");
}

解码字符串现在可以得到预期的输出:

decode("0h2abe1zy"); // "hey"
decode("0h20abcdefghijklmnopqrste1zy"); // "hey"

答案 2 :(得分:0)

这很有效。

    function decode(text) {
        var result = '';
        var i = 0, n = text.length;
        while (i < n) {
            if (Number(text[i]) == text[i]) {
                i += parseInt(text[i]) + 1;
            }
            else
                result += text[i++];
        }
        return result;
    }
var result = decode("0h2abe1zy");

如果你有一个数组["0h2abe1zy"],那么请向每个成员申请 这是你想要的吗?