如何在二维数组的字符串元素中大写字母后添加空格?
解决方案
你可以通过嵌套数组映射结合正则替换来实现需求,核心逻辑是:仅对字符串元素做大写字母前插入空格的处理,非字符串元素直接保留原样。
实现步骤
- 字符串处理逻辑:使用正则表达式
/(?=[A-Z])/g,这个正则的正向预查会匹配所有紧跟大写字母的位置,将这些位置替换为空格,就能实现如GameBook→Game Book的拆分效果。如果需要排除字符串开头的大写字母(避免全大写字符串被拆成带前置空格的形式),可以改用/(?<!^)(?=[A-Z])/g。 - 数组遍历逻辑:用两层
Array.prototype.map()遍历二维数组,外层遍历每个子数组,内层遍历子数组的每个元素,通过typeof判断元素是否为字符串,是则应用正则替换,否则直接返回原元素。
完整代码
let arr = [ ["Title", "GameBook"], ["anyOfYear", 1234], ["pieChart", "somePage"], ]; const processedArr = arr.map(subArr => subArr.map(item => typeof item === 'string' ? item.replace(/(?=[A-Z])/g, ' ') : item ) ); console.log(processedArr); // 输出结果: // [ ["Title", "Game Book"], ["any Of Year", 1234], ["pie Chart", "some Page"] ]
补充说明
- 若需处理包装对象类型的字符串(如
new String("test")),可以将类型判断改为Object.prototype.toString.call(item) === '[object String]',确保精准识别所有字符串类型。 - 正则
/(?<!^)(?=[A-Z])/g中的(?<!^)是负向预查,用于排除字符串开头的位置,避免HELLO被拆成H E L L O,而是保持HELLO不变。
内容的提问来源于stack exchange,提问作者user20722939
相关产品推荐
相关产品推荐

