【问题标题】:Can I use a regular expression to convert these examples to markdown?我可以使用正则表达式将这些示例转换为降价吗?
【发布时间】: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 之间的多个空格不会被捕获,只是之前的空格。

标签: regex markdown


【解决方案1】:

好像你想要这样的东西。

\B(\*+)(\s*)(?:\b\*+\b|[^*\s]|\s(?=\w))*(\s*)(\*+)\B

DEMO

【讨论】:

  • 这看起来确实可以处理所有这些极端情况,谢谢。你能解释两件事吗: * 为什么语句需要被 \B 包围,以及 * 中间匹配捕获的不同部分是什么:(?:\b\*+\b|[^*\s]|\s(?=\w))
猜你喜欢
  • 1970-01-01
  • 2014-06-10
  • 2015-03-21
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多