BrBearOFS
BrBearOFS

Reputation: 3

Finding the index to a non-specified character

Let's say for example I have a string

thisIsThisTuesday Day

I want to find the index of all the capital letters, test if there is a space before it, and if not insert one. I would need the index of each one. At least from what I can see indexOf(String) will only produce the index of the first occurance of the character T/t

This :

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)
  }
}

would produce the capital letters, and their indexes but will only display the first occurrence of the character in question. I feel pretty confident that the part I am missing is a for() loop in order to move the index iteration..but it escapes me.

Thank you in advance!

Upvotes: 0

Views: 218

Answers (4)

Nick Parsons
Nick Parsons

Reputation: 50749

You can use the following regular expression:

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

The replace will insert spaced between characters which are non-space followed by a capital letter.

See example below:

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

console.log(res);

Note: As pointed out ?<= (positive lookbehind) is currently not be available in all browsers.

Upvotes: 1

Sebastian Speitel
Sebastian Speitel

Reputation: 7346

You can use a regex:

It matches any non-whitespace character followed by a capital letter and replaces it by the two characters with a space between.

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

Upvotes: 2

Alex G
Alex G

Reputation: 1917

You could iterate over the string and check if each character is a capital. Something like this:

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));

Or alternatively with reduce function:

const s = 'thisIsThisTuesday Day';

const format = (s) => s.split('').reduce((acc, c) => c.match(/[A-Z]/) ? acc + ` ${c}` : acc + c, '');

console.log(format(s));

Upvotes: 0

Spyros P.
Spyros P.

Reputation: 296

Actually, the String.indexOf function can take a second argument, specifying the character it should start searching from. Take a look at: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

But, if you just want to find all capital letters and prefix them with a space character, if one is not found, there are many approaches, for example:

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);
}

After running this, ret will hold the value "this Is This Tuesday Day"

Upvotes: 0

Related Questions