例如,我有一个字符串
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()循环以移动索引迭代..但是它使我逃脱了。
提前谢谢!
答案 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”