【发布时间】:2015-02-01 14:27:44
【问题描述】:
我一直致力于 google docs to markdown converter 将用 google 文档编写的帖子转换为可以在 jekyll 中轻松使用的内容。不幸的是,谷歌文档有一些使转换变得不简单的弱点。例如,kramdown emphasis 要求被强调的文本被强调标记“包围”,其中:
包围表示起始分隔符后面不能有空格,终止分隔符前面不能有空格。
另一方面,在 google 文档中,可以强调空格,这将生成 kramdown 无法解析的输出。
*em * 将产生 *em *,而不是 em。
我编写了一个正则表达式来匹配和替换这种不正确的强调,但我被困在一个极端情况下。
/(\*+)(\s*\b)([^\*]*)(\b\s*)(\*+)/g 将正确匹配(因此允许替换以下每个强调区域):
*** Strong italic text ***, and even just *strong text *, when rendered in * Markdown*, doesn't like *spaces * around the boundaries of the stars.
但是当单词中有强调时会窒息。
* You can see it also within the li**n**es here. *
(匹配现在在 "lines" 中以 *s 停止,并且不会在终止 *.之前捕获 " "s。)
这一切都在regexr 上一目了然。
如何编辑正则表达式以正确处理这种极端情况,即忽略(正确)嵌入单词中的 *s?
【问题讨论】:
-
如果有人有另一种 google docs -> jekyll 方法,我也全神贯注,尽管我发现浏览 HTML 需要单独的样式表才能正确呈现每个文档的格式。
-
不建议尝试用正则表达式解析非正则语言。
-
请注意,点和空格后不存在单词边界。
-
@clearf 你的意思是regex101.com/r/jF5vL3/1 ?
-
@AvinashRaj 非常接近,谢谢。单词和 *s 之间的多个空格不会被捕获,只是之前的空格。