比方说,我有一个字符串
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()循环,以便移动索引迭代..但它逃脱了我 .
先感谢您!
5 回答
你可以使用正则表达式:
它匹配任何非空格字符后跟一个大写字母,并用两个字符替换它们之间的空格 .
实际上,
String.indexOf
函数可以采用第二个参数,指定它应该开始搜索的字符 . 看看:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf但是,如果您只想查找所有大写字母并在其前面添加空格字符,如果找不到,则有很多方法,例如:
运行此操作后,ret将保持值“this is This Tuesday Day”
您可以迭代字符串并检查每个字符是否为大写字母 . 像这样的东西:
或者使用reduce功能:
您可以使用以下正则表达式:
/(?<=\S)(?=[A-Z])/g
replace
将在非空格后跟大写字母的字符之间插入间隔 .见下面的例子:
Note: 正如所指出的那样
?<=
(正面观察)目前并非在所有浏览器中都可用 .另一个正则表达式变化:
正则表达式由两个断言(=条件)和读取组成
\B
=当前位置(=光标)在两个字母之间或两个非字母之间(?=[A-Z])
=光标右侧的字符是大写字母