0

给定一个 Markdown 源文本:

- sometext

- sometext
followingText



- sometext

- sometext
- sometext

我想在列表范围内替换双\n\n换行符\nWhiteSpace\n

所以用$1 的 JS 技术,我做到了

(- [\s\S]+?)(?:\n\n(?=\n))|(- [\s\S]+?)(?:\n\n(?=- )) http://regex101.com/r/hO7vT9

蓝色选择是几乎可以工作的目标,除了第一个双换行符没有被选中。

这是因为(- [\s\S]+?)(?:\n\n(?=\n))首先匹配并且(- [\s\S]+?)(?:\n\n(?=- ))不评估。

当然,我可以恢复订单(- [\s\S]+?)(?:\n\n(?=- ))|(- [\s\S]+?)(?:\n\n(?=\n)),那么现在

http://regex101.com/r/tR8sN4

现在,第一个选择有效,但第二个选择失败。(与第一个版本相比,第二个选择的预期结果)。

有什么解决方法吗?

当然,你可以建议将正则表达式分开,替换两次;我做得很好,结果很混乱,所以我想在一个正则表达式中实现这一点。语言是JS。

4

1 回答 1

0

发表我的评论作为答案。

试试下面的。抱歉,如果这仍然不是您想要的。

regex = new RegExp(/(- [\s\S]+?)(?:(\n){2,}(?=\n|-))/g);
inputString = '- sometext\n\n- sometext\nfollowingText\n\n\n\n- sometext\n\n- sometext\n- sometext';
outputString = inputString.replace(regex,'$1\nWhiteSpace\n');
console.log(outputString);
于 2013-08-10T05:30:50.970 回答