markdown emph regex match

时间:2016-09-02 07:51:35

标签: 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_]|$)"

旧的不足以应对这种情况

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

1 个答案:

答案 0 :(得分:1)

在使用正则表达式解析markdown时,您应该小心使用正则表达式方法,因为您的数据可以具有转义序列。这意味着,如果前面没有反斜杠,你不能只使用lookarounds来匹配某些内容。您可以尝试使用正则表达式来将匹配之前的转义序列匹配到一个组中,将降价部分匹配到另一个组中。

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

this regex demo。在代码中,您需要根据您的规范不同地处理这两个组。

模式详细信息

  • (?u) - 在模式中使字边界符合Unicode意识
  • (\\\\.) - 第1组 - 转义序列
  • | - 或
  • (\\*\\b(?:(?!\\\\[*]).)*?\\b\\*) - 第2组匹配
    • \\*\\b - *后跟一个字词char
    • (?:(?!\\\\[*]).)*? - 任何不是\*序列的起始字符的字符,尽可能少
    • \\b\\* - *前面有一个字词char

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