上述内容输出成 这种类型 并把id 取出来 [{name:'', id:'', text:''}],这里的对象name 是中括号内 & 后面的字符串,id 是 中括号内id= 到 & 的内容,没有值返回 null,text 是这段中括号外的内容
时间: 2024-09-27 08:03:48 浏览: 22
好的,根据您的描述,我们可以编写一个函数来转换给定的字符串,将其转换为指定的格式。这里是一个示例实现:
```javascript
function parseWorkoutString(str) {
function extractContent(keyValue) {
const splitPoint = keyValue.indexOf('&');
return {
id: splitPoint > 0 ? keyValue.substring(0, splitPoint).trim() : null,
name: splitPoint > 0 ? keyValue.substring(splitPoint + 1).trim() : '',
text: keyValue.replace(/\[(.*?)\]/, '').trim()
};
}
const result = [];
let currentSection = '';
let inBracket = false;
for (let i = 0; i < str.length; i++) {
if (str[i] === '[' && !inBracket) {
currentSection = {name: '', id: '', text: ''};
inBracket = true;
} else if (str[i] === ']') {
if (currentSection.id || currentSection.name) {
result.push(currentSection);
currentSection = '';
}
inBracket = false;
} else if (inBracket) {
const keyValue = str.slice(i).trim(); // 获取剩余部分直到下一个闭合的中括号
const data = extractContent(keyValue);
currentSection = Object.assign({}, currentSection, data); // 更新当前section
i += keyValue.length - 1; // 跳过已处理的部分
} else {
currentSection.text += str[i];
}
}
return result;
}
// 测试数据
const workoutData = parseWorkoutString(
"这[热身(5-7分钟)][id=39&慢跑](5KM/h):5分钟[id=&动态拉伸](保持15秒):腿部、背部" +
"\n主训练(40-50分钟)" +
"\n1.[id=&冲刺跑]:6组,每组20秒" +
"\n2.[id=44&开合跳]:5组,每组30次" +
"\n3.[id=287&深蹲跳]:5组,每组15次" +
"\n4.[id=1&俯卧撑]:5组,每组12次" +
"\n5.[id=&弓步跳]:4组,每组12次" +
"\n放松(5-7分钟)" +
"\n[id=&静态拉伸]:腿部、背部"
);
console.log(workoutData); // 输出:[{name: '慢跑', id: '39', text: '(5KM/h):5分钟'}, ...]
```
阅读全文