尝试解析javascript中包含粗体注释的字符串,标记为*multi word bold*
(星号)和斜体注释,标记为_multi word italic_
(下划线)。
我希望解析器函数支持多字注释,粗体斜体,斜体粗体和混合(参见示例)。
以下是一些带有所需输出示例的输入:
const simpleInput = "The *quick brown fox* jumps _over the lazy dog_";
const simpleOutput =[
{text: 'The '},
{text: 'quick brown fox', bold: true},
{text: ' jumps '},
{text: 'over the lazy dog', italic: true}
];
const italicWithinBoldInput = "The *quick brown _fox jumps_ over the* lazy dog";
const italicWithinBoldOutput =[
{text: 'The '},
{text: 'quick brown ', bold: true},
{text: 'fox jumps', bold: true, italic: true},
{text: ' over the', bold: true},
{text: ' lazy dog'}
];
const mixedInput = "The *quick brown _fox jumps* over the_ lazy dog";
const mixedOutput =[
{text: 'The '},
{text: 'quick brown ', bold: true},
{text: 'fox jumps', bold: true, italic: true},
{text: ' over the', italic: true},
{text: ' lazy dog'}
];
我在npm尝试了一些解析器但是一切都有点矫枉过正,没有什么是我需要的......
答案 0 :(得分:3)
您可以通过以下方式执行此操作
function getObject(str){
let bold = false, italics = false;
let output = [];
let text = str.split('').reduce((a, b) => {
if(b == '*'){
if(bold){
if(a != ''){
if(italics)
output.push({text: a, bold: true, italics:true});
else
output.push({text: a, bold: true});
}
bold = false;
}
else{
if(italics)
output.push({text: a, italics: true})
else
output.push({text: a})
bold = true;
}
return '';
}
else if(b == '_'){
if(italics){
if(a != ''){
if(bold)
output.push({text: a, bold: true, italics:true});
else
output.push({text: a, italics: true});
}
italics = false;
}
else{
if(bold)
output.push({text: a, bold: true})
else
output.push({text: a})
italics = true;
}
return '';
}
else{
return a+b;
}
}, '');
if(text != '')
output.push({text : text});
console.log(output);
return output;
}
const simpleInput = "The *quick brown fox* jumps _over the lazy dog_";
getObject(simpleInput);
const italicWithinBoldInput = "The *quick brown _fox jumps_ over the* lazy dog";
getObject(italicWithinBoldInput);
const mixedInput = "The *quick brown _fox jumps* over the_ lazy dog";
getObject(mixedInput);