Javascript中如何快速解析带特殊字符的字符串获取对应水果颜色
JS 解析字符串获取对应水果颜色的实现方案
根据你的使用场景可以选择两种高效实现方式,按需选用即可:
场景1:仅需查询1-2次,用正则单次匹配
这种方案不需要全量解析整个字符串,只匹配你需要查询的目标水果名,少量查询时效率最高,代码也更简洁:
var fruitAndColors = "APPLE=RED&GUAVA=GREEN&STRAWBERRY=RED&BANANA=yellow&ORANGE=orange" function getColor(fruitName) { // 匹配开头或&后跟水果名,再跟=,直到遇到下一个&或字符串结尾的内容 const matchResult = fruitAndColors.match(new RegExp(`(^|&)${fruitName}=([^&]*)`)) return matchResult ? matchResult[2] : undefined }
场景2:需要多次查询,用预解析缓存映射
如果需要多次调用getColor查询不同水果的颜色,更推荐先把整个字符串一次性解析成键值对对象缓存,后续每次查询都是O(1)复杂度,总耗时远低于多次正则匹配:
var fruitAndColors = "APPLE=RED&GUAVA=GREEN&STRAWBERRY=RED&BANANA=yellow&ORANGE=orange" // 一次性全量解析为映射对象 const fruitColorMap = fruitAndColors.split('&').reduce((map, item) => { const [fruit, color] = item.split('=') map[fruit] = color return map }, {}) function getColor(fruitName) { return fruitColorMap[fruitName] }
两种实现都能满足示例调用需求:
var applecolor = getColor("APPLE") // RED var bananaColor = getColor("BANANA") // yellow
新手注意事项
- 入参水果名的大小写要和原字符串里的完全一致,比如传小写
apple会查询失败,需要大小写不敏感的话可以在匹配前统一把key和入参转成小写/大写 - 如果查询的水果不存在,函数默认返回
undefined,可以根据业务需求自行设置默认返回值,比如修改为return fruitColorMap[fruitName] ?? '未知颜色'
内容的提问来源于stack exchange,提问作者DotNetSpartan
相关产品推荐
相关产品推荐

