我想创建一个替换字母大写的函数。例如,Hello World
将变为HeLlO wOrLd
。字符串的第一个字母必须始终大写。
这是我编写的代码:
function alternatingCaps(str) {
let alternate = str.charAt(0).toUpperCase();
for(let i = 1; i < str.length; i++) {
let previousChar = str.charAt(i - 1);
if(previousChar === previousChar.toUpperCase())
alternate += str.charAt(i).toLowerCase();
else if(previousChar === previousChar.toLowerCase())
alternate += str.charAt(i).toUpperCase();
}
return alternate;
}
我用提供的字符串的首字母大写声明了alternate
变量。然后,我遍历字符串的其余部分,并检查当前迭代之前的字符是大写还是小写;无论哪种情况,当前字母都将变为相反。
但是,这没有理想的结果。这是一些测试及其相应的结果:
console.log(alternatingCaps('hello world'));
// Output: "HELLO wORLD"
console.log(alternatingCaps('jAvaScrIPT ruLEZ'));
// Output: "JAvAScRIpt rULez"
如何修复我的功能?
答案 0 :(得分:1)
let s = 'hello there this is a test';
s = s.split('').map( (letter,i) => (i % 2) == 0 ? letter.toUpperCase() : letter.toLowerCase() ).join('')
console.log( s );
更新:如果您想忽略但保留空格,那么这是另一种解决方案,尽管有些棘手。它不仅忽略空格,还对匹配正则表达式的字母进行操作。
let s = 'hello there this is a test';
let ul = false;
s = s.split('').map(letter => letter.match(/[a-zA-Z]/) != null ? (ul = ! ul, ul ? letter.toUpperCase() : letter.toLowerCase()) : letter).join('');
console.log( s );
答案 1 :(得分:0)
我能想到的最简单的解决方案是使用for循环和Remainder运算符。
let alterNate = (input) => {
let str = ''
let last = 'L'
for(let i=0; i<input.length; i++){
if( /[a-z]/ig.test(input[i]) ) {
if(last==='L'){
str+= input[i].toUpperCase()
last = 'U'
} else{
str+= input[i].toLowerCase()
last = 'L'
}
} else {
str+=input[i]
}
}
return str;
}
console.log(alterNate('hello world'))
答案 2 :(得分:0)
我的解决方案使用RegEx replace来达到预期的结果:
function alternatingCaps(str) {
return str.replace(/\w(.|$)/g, s => s[0].toUpperCase() + (s[1] ? s[1].toLowerCase() : ''));
}
console.log(alternatingCaps('hello world'));
console.log(alternatingCaps('jAvaScrIPT ruLEZ'));
有两件事要注意:
\w(.|$)
-此正则表达式捕获单词字符(\w
)和后面的任何其他字符。 (.|$)
地址中包含奇数个字符。我们基本上是在这里成对捕获字符; s => s[0].toUpperCase() + (s[1] ? s[1].toLowerCase() : '')
-此替换功能完成其余工作:
s[0].toUpperCase()
-需要s[0]
并将其更改为大写; (s[1] ? s[1].toLowerCase() : '')
-它需要s[1]
(如果存在)并将其更改为小写。答案 3 :(得分:0)
这是交替大小写的示例正则表达式
digraph "toto" {
graph ["rankdir"="TB"]
node ["shape"="box"]
"BROUILLON" ["label"="Brouillon","margin"="0.4,0.0"]
"A_VALIDER_RH" ["label"="À valider par la RH","margin"="0.4,0.0","color"="red"]
"A_VALIDER_RH" -> "BROUILLON" ["label"="Refuser"]
"BROUILLON" -> "A_VALIDER_RH" ["label"="Soumettre"]
}