用感叹号代替问号
我需要编写一个函数来接收一个句子字符串和一个真/假'喊'参数。它应该返回字符串,用惊叹号替换任何问号,反之亦然。如果'喊'是真的,所有的字母应该是大写的。用感叹号代替问号
function changeIntonation(str, isShouting) { let myString = '';
let regExcl = /\!/;
let regQmark = /\?/;
let qMarkStr = str.replace(regQmark, '!');
let finalStr = qMarkStr.replace(regExcl, '?');
let newArr = finalStr.split('');
if(isShouting === true) {
let upperCaseArr = newArr.map(function(char){
return char.toUpperCase();
})
myString = upperCaseArr.join('');
}
return myString;
}
我的代码工作时,我尝试转换嘿!你好吗?到嘿,你好吗?,但是当我测试嘿?你好吗!它只是使大写,感叹号和问号保持不变。 也!?到?!失败。 任何想法?谢谢。
回答:
问题是,当你尝试用?
和更换!
然后取代?
与!
,你可能会更换,错误,原来!
和?
已存在。
要解决这一点,你必须更换!
和?
在一个命令,像(using a function argument on String#replace()
):
let finalStr = str.replace(/[!?]/g, function(c) { return c === '?' ? '!' : '?'; });
而且你不需要调用.toUpperCase()
每个字符,你可以用它字符串:
function changeIntonation(str, isShouting) { let finalStr = str.replace(/[!?]/g, function(c) { return c === '?' ? '!' : '?'; });
if (isShouting === true) {
return finalStr.toUpperCase();
} else {
return finalStr;
}
}
console.log(changeIntonation("Hey! How are you?", true));
console.log(changeIntonation("Hey! How are you?", false));
console.log(changeIntonation("Hey? How are you!", true));
console.log(changeIntonation("Hey? How are you!", false));
回答:
您需要同时替换两个字符。
看看HERE(第二个例子)
回答:
感谢@acdcj unior,在我之前回答,我没有注意到他已经回答了!我的代码看起来像他的,但更紧凑一点。所有的
function changeIntonation(str, isShouting) { str = str.replace(/\?|\!/g, function(match) {
return match == "?" ? "!" : "?";
});
return isShouting ? str.toUpperCase() : str;
}
首先我注意到你正在做单个字符大写来就加入他们都在整个字符串。为什么?我只是把整个字符串直接写成大写。
然后我明白了问题是,当您用惊叹号替换问号时,问题和感叹号现在都只有感叹号,所以如果您尝试用问题替换感叹号,则将全部替换它们。 所以我选择用回调替换问题和感叹号标记,并检查回调如果发生是一个或另一个要正确替换。
以上是 用感叹号代替问号 的全部内容, 来源链接: utcz.com/qa/266322.html