我想从下面的文字中打印hey
。我需要创建一个从文本中跳过一定数量字符的函数来打印hey
中的字母。因此,在这种情况下,它会跳过0个字符来打印h
,然后跳过2个字符(a
& b
)来打印e
,并跳过1个字符({{ 1}})打印z
。
y
这是我的代码到目前为止,我找到了带有if语句的数字,但我不知道如何告诉它跳过那么多字符并打印下面的字符。
答案 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"]
,那么请向每个成员申请
这是你想要的吗?