2 回答
TA贡献1805条经验 获得超9个赞
您可以通过在添加回来之前从字符串中删除列表编号来实现这一点。这是一个例子:
const formatList = list => {
list = list
// split the string
.split(';')
// filter out empty list items
.filter(Boolean)
// Iterate over the list items to format them
.map((item, index) => {
// Start with the index (+1 one to start from 1)
return (index + 1)
// Add the dot and the space
+
'. '
// Add the list item without any number+dot substring and any extra space
+
item.replace(/\d+\./g, '').trim()
// Add a final dot (even if list should not usually have ending dots)
+
'.'
})
// Join back the list items with a newline between each
.join('\n');
return list;
};
let str1 = "1. sun ; moon ; star ; god ; goddess";
let str2 = "sun; moon; star; god; goddess;";
let result = "1. sun.\n2. moon.\n3. star.\n4. god.\n5. goddess.";
console.log(formatList(str1), formatList(str1) === result);
console.log(formatList(str2), formatList(str2) === result);
TA贡献1906条经验 获得超3个赞
我们可以拆分正则表达式/\s*;\s*/g,然后处理map函数中列表项上可能已经存在该数字的可能性,就像第一个示例中的情况一样。
let str1 = "1. sun ; a moon ; star ; god ; goddess ; ";
const result = str1.split(/\s*;\s*/g)
.filter(Boolean)
.map((e, i) => `${/^\d+\./.test(e) ? "" : i + 1 + ". "}${e}.`)
.join("\n");
console.log(result);
添加回答
举报