3 回答
TA贡献1829条经验 获得超7个赞
您可以将该.replace()
方法与正则表达式一起使用。首先,您可以使用.toUpperCase()
. 然后,你可以匹配中间的所有字符,(
并)
使用该replace
方法的替换功能将匹配到的字符转换为小写。
请参见下面的示例:
function uppercase(str) {
return str.toUpperCase().replace(/\(.*?\)/g, function(m) {
return m.toLowerCase();
});
}
console.log(uppercase("(H)e(L)lo")); // (h)E(l)LO
console.log(uppercase("(H)ELLO (W)orld")); // (h)ELLO (w)ORLD
如果你可以支持 ES6,你可以用箭头函数清理上面的函数:
const uppercase = str =>
str.toUpperCase().replace(/\(.*?\)/g, m => m.toLowerCase());
console.log(uppercase("(H)e(L)lo")); // (h)E(l)LO
console.log(uppercase("(H)ELLO (W)orld")); // (h)ELLO (w)ORLD
TA贡献1807条经验 获得超9个赞
我试图在不使用任何正则表达式的情况下做到这一点。我正在存储 all(和的索引)。
String.prototype.replaceBetween = function (start, end, what) {
return this.substring(0, start) + what + this.substring(end);
};
function changeCase(str) {
str = str.toLowerCase();
let startIndex = str.split('').map((el, index) => (el === '(') ? index : null).filter(el => el !== null);
let endIndex = str.split('').map((el, index) => (el === ')') ? index : null).filter(el => el !== null);
Array.from(Array(startIndex.length + 1).keys()).forEach(index => {
if (index !== startIndex.length) {
let indsideParentheses = '(' + str.substring(startIndex[index] + 1, endIndex[index]).toUpperCase() + ')';
str = str.replaceBetween(startIndex[index], endIndex[index] + 1, indsideParentheses);
}
});
return str;
}
let str = '(h)ELLO (w)ORLD'
console.log(changeCase(str));
添加回答
举报