regex - markdown emph正则表达式匹配

标签 regex swift markdown

原始字符串:

These * should * not \*be\* selected. This* neither! *should be. This *neither should\* be* *this should* and*This*

期待:

These * should * not *be* selected. This* neither! *should be. This *neither should* be* <em>this should</em> ~~and<em>This</em>~~

旧的正则表达式:

"(^|[\\W_])(?:(?!\\1)|(?=^))(\\*|_)(?=\\S)((?:(?!\\2).)*?\\S)\\2(?!\\2)(?=[\\W_]|$)"

旧的不足以应对这种情况

有人可以帮忙吗?快速正则表达式

最佳答案

在使用正则表达式解析 Markdown 时,您应该小心使用正则表达式方法,因为您的数据可能具有转义序列。这意味着,你不能只使用环视来匹配前面没有反斜杠的东西。您可以尝试使用正则表达式来将 Markdown 之前的转义序列匹配到一组中,并将 Markdown 部分匹配到另一组中。

"(?u)(\\\\.)|(\\*\\b(?:(?!\\\\[*]).)*?\\b\\*)"

参见 this regex demo .在代码中,您需要根据您的规范以不同方式处理这两个组。

图案细节:

  • (?u) - 使模式中的单词边界识别 Unicode
  • (\\\\.) - 第 1 组 - 转义序列
  • | - 或者
  • (\\*\\b(?:(?!\\\\[*]).)*?\\b\\*) - 第 2 组匹配
    • \\*\\b - * 后跟单词 char
    • (?:(?!\\\\[*]).)*? - 任何不是 \* 序列起始字符的字符,尽可能少
    • \\b\\* - 以字符字符开头的 *

更好的选择是自定义解析代码

关于regex - markdown emph正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287104/

相关文章:

ios - 如何在 Swift 中删除字符串的最后一个路径组件?

ios - UIStackView 的高度和垂直位置不明确

ios - leadingSwipeActions 与自定义手势冲突

reactjs - Tailwind/排版如何在 React 项目中与 markdown-it 良好配合?

php - 如何从 PHP 中的括号之间获取所有内容?

java - 如何构建正则表达式以获取两个单引号之间的值,如果没有单引号,则在逗号之间提取值

regex - 使用 xslt 将简单的 markdown(string) 转换为 html

python - 格式化纯文本时,如何让 python-markdown 附加 "urlify"链接?

regex - 拆分 XSD 中的正则表达式模式限制

c# - 正则表达式模式与某些节目标题不匹配