我正在使用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中删除所有特殊字符的操作就不可行了。
答案 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
正则表达式匹配大小写字母。