JS-逐个字符地遍历文本片段,跳过某些字符

时间:2018-08-13 20:00:16

标签: javascript for-loop character

我正在使用JS遍历给定的文本,以下简称为“ input_a”

基于另一个内容,并使用单独的文本“ input_b” ,我想通过为它们分配布尔值来操纵文本“ input_a” 的各个字符

到目前为止,我已经通过以下方式进行了处理:

for (i=0; i < input_a.length; i++) {
    if (input_b[i] == 0){
      //do something to output
    }
}

现在的问题是上述循环,因为它使用.length,还包括所有空白/特殊字符,而我只想包含AZ-省略所有特殊字符(在这种情况下,不适用于收到分配给他们的布尔值)。

我如何才能有效而优雅地解决这一问题-并希望不必重新发明轮子或创建自己的字母数组?

编辑1:忘了提到当最终将操纵的 input_a 作为输出提供时,特殊字符的位置需要保留。这样一来,从input_a中删除所有特殊字符的操作就不可行了。

3 个答案:

答案 0 :(得分:0)

听起来好像您希望input_a仅保留字母字符-您可以使用正则表达式轻松对其进行转换。匹配所有非字母字符,并将其替换为空字符串:

const input_a = 'foo_%%bar*&#baz';
const sanitizedInputA = input_a.replace(/[^a-z]+/gi, '');
console.log(sanitizedInputA);
// iterate through sanitizedInputA

如果您希望在处理input_b之前执行相同的操作,只需使用与.replace相同的a

如果需要各个索引保持不变,则可以在进行迭代时进行类似的正则表达式测试-如果要迭代的字符不是字母,则只需continue

const input_a = 'foo_%%bar*&#baz';
for (let i = 0; i < input_a.length; i++) {
  if (!/[a-z]/i.test(input_a[i])) continue;
  console.log(input_a[i]);
}

答案 1 :(得分:0)

根据订单的“编辑1”进行编辑

如果您想在没有RegEx的情况下执行此操作,则可以使用此功能:

function isSpecial(char) {
    if(char.toLowerCase() != char.toUpperCase() || char.toLowerCase.trim() === ''){
        return true;
    }
    return false;
}

然后您可以为每个字符进入循环调用此函数。

答案 2 :(得分:0)

您可以检查当前位置的字符是否是字母,例如:

for (i=0; i < input_a.length; i++) {
    if(/[a-z]/i.test(input_a[i])){
        if (input_b[i] == 0){
           //do something to output
        }
    }
}

/[a-z]/i正则表达式匹配大小写字母。