nir*_*sky 4 javascript regex markdown
尝试解析 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'}
];
Run Code Online (Sandbox Code Playgroud)
我在 npm 上尝试了一些解析器,但一切都有点矫枉过正,没有什么是我所需要的。
您可以通过以下方式进行
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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2019 次 |
| 最近记录: |