Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Markdown 语法无法正常解析,会出现多余的换行 #273

Open
Versus2017 opened this issue Nov 19, 2023 · 5 comments
Open

Markdown 语法无法正常解析,会出现多余的换行 #273

Versus2017 opened this issue Nov 19, 2023 · 5 comments

Comments

@Versus2017
Copy link

我使用的是最新版本v3,我在解析长字符串时,解析成小程序的dom,会出现很多多余的换行,导致显示错乱!

###要解析的原文本如下###

成为律师通常需要完成以下步骤,但请注意,这些步骤可能因国家或地区而异:

1. **教育背景**:
   - 完成高中教育。
   - 获得学士学位。在某些国家,你需要完成特定的预律学课程或拥有相关领域的学士学位,如政治学、历史或法学。

2. **法学院**:
   - 参加法学院入学考试(如美国的LSAT)。
   - 获得法学院录取,并完成法学教育,通常是三年的全日制学习,获得法学博士(JD)学位。

3. **实习经验**:
   - 在法学院期间或之后,通过实习或工作,获得实际法律工作经验。

4. **通过律师资格考试**:
   - 在大多数国家和地区,你需要通过律师资格考试才能获得执业许可。在美国,这被称为律师资格考试(Bar Exam)。

5. **道德和背景审查**:
   - 通过道德品质评估和背景调查,证明你的诚信和适合从事法律职业。

6. **律师执照**:
   - 在通过考试和审查后,你将获得律师执照,可以在特定的司法管辖区内执业。

7. **持续教育**:
   - 律师通常需要参加持续法律教育课程,以保持他们的执业资格并跟上法律的变化。

8. **专业发展**:
   - 一些律师可能会选择专门化,通过额外的考试和认证来专攻某个法律领域。

9. **加入律师协会**:
   - 在某些国家,律师需要加入律师协会或律师公会,以便维护职业标准和参与职业发展活动。

请记住,这些步骤是一般性的指导,具体要求可能会根据你所在的国家或地区有所不同。如果你对特定地区的要求有疑问,最好咨询当地的律师协会或教育机构。

###调用 md.render 后的结果如下###

<p>成为律师通常需要完成以下步骤,但请注意,这些步骤可能因国家或地区而异:</p>
<ol>
<li>
<p><strong>教育背景</strong>:</p>
<ul>
<li>完成高中教育。</li>
<li>获得学士学位。在某些国家,你需要完成特定的预律学课程或拥有相关领域的学士学位,如政治学、历史或法学。</li>
</ul>
</li>
<li>
<p><strong>法学院</strong>:</p>
<ul>
<li>参加法学院入学考试(如美国的LSAT)。</li>
<li>获得法学院录取,并完成法学教育,通常是三年的全日制学习,获得法学博士(JD)学位。</li>
</ul>
</li>
<li>
<p><strong>实习经验</strong>:</p>
<ul>
<li>在法学院期间或之后,通过实习或工作,获得实际法律工作经验。</li>
</ul>
</li>
<li>
<p><strong>通过律师资格考试</strong>:</p>
<ul>
<li>在大多数国家和地区,你需要通过律师资格考试才能获得执业许可。在美国,这被称为律师资格考试(Bar Exam)。</li>
</ul>
</li>
<li>
<p><strong>道德和背景审查</strong>:</p>
<ul>
<li>通过道德品质评估和背景调查,证明你的诚信和适合从事法律职业。</li>
</ul>
</li>
<li>
<p><strong>律师执照</strong>:</p>
<ul>
<li>在通过考试和审查后,你将获得律师执照,可以在特定的司法管辖区内执业。</li>
</ul>
</li>
<li>
<p><strong>持续教育</strong>:</p>
<ul>
<li>律师通常需要参加持续法律教育课程,以保持他们的执业资格并跟上法律的变化。</li>
</ul>
</li>
<li>
<p><strong>专业发展</strong>:</p>
<ul>
<li>一些律师可能会选择专门化,通过额外的考试和认证来专攻某个法律领域。</li>
</ul>
</li>
<li>
<p><strong>加入律师协会</strong>:</p>
<ul>
<li>在某些国家,律师需要加入律师协会或律师公会,以便维护职业标准和参与职业发展活动。</li>
</ul>
</li>
</ol>
<p>请记住,这些步骤是一般性的指导,具体要求可能会根据你所在的国家或地区有所不同。如果你对特定地区的要求有疑问,最好咨询当地的律师协会或教育机构。</p>

最后每个节点按照如上字符串的方式出现多余换行,结果如下:
image

@Versus2017
Copy link
Author

我查看dom节点,发现有很多换行
image

@Versus2017
Copy link
Author

还请麻烦指导一下

@Versus2017
Copy link
Author

Versus2017 commented Nov 19, 2023

是不是应该在匹配节点末端,如 </li>,不添加换行?

@Versus2017
Copy link
Author

暂时解决了这个问题,我在解析之前过滤了 \r\n


module.exports = (str,type,option)=>{
    option = option || {};
    let result;
    switch (type) {
        case 'markdown':
            let r = md(str)
            // 添加如下代码,过滤 \r\n
            r = r.replace(/(\r|\n){1,}/g, str => {
                return new Array(str.length).join("<p>&nbsp;</p>")
            });
            r = r.replace(/\r|\n/g, str => {
                return "\r"
            });

            result = parse(r,option);
        break;
        case 'html':
            result = parse(str,option);
        break;
        default:
            throw new Error('Invalid type, only markdown and html are supported');
        break;
    };
    return result;
};

@JamiLanister
Copy link

暂时解决了这个问题,我在解析之前过滤了 \r\n


module.exports = (str,type,option)=>{
    option = option || {};
    let result;
    switch (type) {
        case 'markdown':
            let r = md(str)
            // 添加如下代码,过滤 \r\n
            r = r.replace(/(\r|\n){1,}/g, str => {
                return new Array(str.length).join("<p>&nbsp;</p>")
            });
            r = r.replace(/\r|\n/g, str => {
                return "\r"
            });

            result = parse(r,option);
        break;
        case 'html':
            result = parse(str,option);
        break;
        default:
            throw new Error('Invalid type, only markdown and html are supported');
        break;
    };
    return result;
};

感谢老哥 我也这么解决的,但是想问下为什么要用空p标签替换呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants