这是问题所在。我从后端获取一个字符串,并希望用大写替换两个字母。以下是代码:
var query = "WHERE account >= 23 || company != null;";
var slicedQuery = query.slice(7);
slicedQuery = slicedQuery.replace(slicedQuery.charAt(slicedQuery.lastIndexOf(";")), "");
var firstChar = slicedQuery.charAt(0);
slicedQuery = slicedQuery.replace(firstChar, firstChar.toUpperCase());
if(slicedQuery.indexOf("|") >= 0) {
var charInCondition = slicedQuery.charAt(slicedQuery.indexOf("|") + 3);
slicedQuery = slicedQuery.replace(charInCondition, charInCondition.toUpperCase());
}
帐户的“a”已正确替换为“A”。但公司的'c'并没有被取代。相反,Acconut中的'c'被'C'取代。请告诉我们如何做到这一点。救命啊!
答案 0 :(得分:0)
问题
函数replace
将仅替换第一个参数的第一个出现。您的代码正确识别它必须替换'c'(来自“公司”),但调用replace
只会更改'c'的首次出现(在“帐户”中)。
解决方案
您需要使用以下代码替换if
块中的代码:
var idx = slicedQuery.indexOf("|") + 3;
var charToReplace = slicedQuery.charAt(idx);
slicedQuery = slicedQuery.substring(0, idx)
+ slicedQuery.substring(idx).replace(
charToReplace, charToReplace.toUpperCase());
(顺便说一句,你确定它应该是.slice(7)
而不是.slice(6)
吗?)