如何用JavaScript反转字符串但保留大括号{}内的字符?
解决方案
要实现「反转整个字符串但保留大括号内内容不变」的需求,核心是区分大括号内外的片段,分别处理后再组合。具体思路如下:
- 拆分字符串:把原字符串拆分为两类片段——普通字符段和完整的
{xxx}大括号段,比如"ab{cd}ef{gh}i"会被拆成["ab", "{cd}", "ef", "{gh}", "i"] - 处理单个片段:对普通字符段进行反转,大括号段直接保留原样
- 重组字符串:把处理后的片段数组整体反转,再拼接成最终结果
对应的JavaScript代码实现:
function reverseChar(string2) { // 用正则拆分字符串,匹配大括号段或非大括号段 const tokens = string2.match(/(\{.*?\}|[^{}]+)/g) || []; // 处理每个片段:普通段反转,大括号段保持不变 const processedTokens = tokens.map(token => { if (token.startsWith('{') && token.endsWith('}')) { return token; } return token.split('').reverse().join(''); }); // 反转片段数组后拼接,得到最终结果 const result = processedTokens.reverse().join(''); console.log(result); return result; } // 测试用例 reverseChar("ab{cd}efg"); // 输出: "gfe{cd}ba" reverseChar("ab{cd}ef{gh}i"); // 输出: "i{gh}fe{cd}ba"
代码说明
- 正则
/(\{.*?\}|[^{}]+)/g采用非贪婪匹配.*?,确保只会匹配到最近的闭合大括号,避免嵌套大括号(如果有)的匹配问题 - 先处理单个普通片段的反转,再整体反转片段数组,这样既保证了整个字符串的反转逻辑,又保留了大括号内的内容顺序
内容的提问来源于stack exchange,提问作者Jeffrey
相关产品推荐
相关产品推荐

