如何使用正则表达式拆分字符串生成指定结构的对象数组
需求说明
需要将给定格式的字符串转换为指定结构的对象数组,现有输入字符串如下:
const str = "addias (brand|type) sneakers(product) for men(o)"
期望输出结构:
let output = [ { key:"addias", value:["brand","type"] }, { key:"sneakers", value:["product"] }, { key:"for men", value:[] } ]
原有实现的问题:
按空格拆分字符串的逻辑,在key包含空格(例如for men)的场景下会解析错误,无法正确提取带空格的key。
实现方案
用全局正则匹配每个「key(值列表)」单元即可解决,完整实现代码如下:
function generateSchema(val) { // 正则匹配规则:[捕获组1:所有非括号字符] + ( + [捕获组2:所有非右括号字符] + ) const matchRule = /([^()]+)\(([^)]*)\)/g const result = [] let currentMatch while ((currentMatch = matchRule.exec(val)) !== null) { // 提取key,去除首尾多余空格 const key = currentMatch[1].trim() // 提取括号内的原始值 const rawValue = currentMatch[2].trim() const value = rawValue && rawValue !== 'o' ? rawValue.split('|') : [] result.push({ key, value }) } return result } // 测试 const str = "addias (brand|type) sneakers(product) for men(o)" console.log(generateSchema(str))
逻辑说明
- 正则
/([^()]+)\(([^)]*)\)/g会全局匹配所有符合规则的键值单元,带空格的key会被完整捕获到第一组 - 括号内的内容如果是标记
o或者为空,直接返回空数组,否则按|拆分得到值列表 - 自动去除key的首尾多余空格,兼容key和括号之间有空格、没有空格的两种格式
内容的提问来源于stack exchange,提问作者Subee Na
相关产品推荐
相关产品推荐

