查找未指定字符的索引

时间:2018-12-10 11:11:19

标签: javascript

例如,我有一个字符串

thisIsThisTuesday Day

我想找到所有大写字母的索引,测试它前面是否有空格,如果没有,请插入一个空格。我需要每个索引。 至少从我看来indexOf(String)只会产生字符T/t

首次出现的索引

此:

for(i=0;i<str.length;i++){
  let char=str[i];

  if(isNaN(char*1)&&char==char.toUpperCase()){
    y=str.indexOf(char);
    console.log(char,y)
  }
}

将产生大写字母及其索引,但仅显示该字符的首次出现。我非常有信心,我缺少的部分是for()循环以移动索引迭代..但是它使我逃脱了。

提前谢谢!

4 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

它与任何非空白字符后跟一个大写字母匹配,并用两个字符替换,中间用空格隔开。

const str = "thisIsThisTuesday Day";
const newstr = str.replace(/([^ ])([A-Z])/g, "$1 $2");
console.log(newstr);

答案 1 :(得分:1)

您可以使用以下正则表达式:

/(?<=\S)(?=[A-Z])/g

replace将在非空格字符后插入大写字母。

请参见以下示例:

let str = "thisIsThisTuesday Day";
const res = str.replace(/(?<=\S)(?=[A-Z])/g, ' ');

console.log(res);

注意:正如所指出的,?<=(正向后面)目前并非在所有浏览器中都可用。

答案 2 :(得分:0)

您可以遍历字符串并检查每个字符是否为大写。像这样:

  if (encoder.matches(newPasswordPlainText, oldPasswordEncrypted)) {
    return false;
  }

或者具有reduce功能:

const s = 'thisIsThisTuesday Day';

const format = (s) => {
    
    let string = '';

    for (let c of s) {

        if (c.match(/[A-Z]/)) string += ' ';

        string += c;
    }

    return string;
};

console.log(format(s));

答案 3 :(得分:0)

实际上,String.indexOf函数可以使用第二个参数,指定应从其开始搜索的字符。看看:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

但是,如果您只想查找所有大写字母并以空格字符作为前缀,则如果找不到一个大写字母,则有很多方法,例如:

var str = "thisIsThisTuesday Day";
var ret = '';
for (var i=0; i<str.length; i++) {
    if (str.substr(i, 1) == str.substr(i, 1).toUpperCase()) {
        if ((i > 0) && (str.substr(i - 1,1) != " "))
            ret += " ";
    }
    ret += str.substr(i,1);
}

运行此命令后,ret将保留值“ this is this Tuesday Tuesday”