如何选择不能是组成员且在正则表达式中不为空的表达式?



我正在尝试进行自定义降价。我也在$ ... $组中使用 katex。但是在替换表达式时,如果它们在$ ... $组中,我必须不替换这些表达式。

示例:Lorem**Ipsum**(1) 是印刷和排版行业的*simply*(2) 虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,$ sqrt{2} **must be no bold **(3) *must be no italic *(4) $****(5) **(6)...

  • 示例 (1):以**开头,以**结尾,它不在$...$组中,因此它将加粗。
  • 示例 (2):以*开头,以*结尾,它不在$...$组中,因此它将是斜体。
  • 示例 (3):以**开头,以**结尾,但它位于$...$组中,因此不会加粗。
  • 示例 (4):以*开头,以*结尾,但它位于$...$组中,因此不会为斜体。
  • 示例 (5):以**开头,以**结尾,但它为空,因此不会加粗。
  • 示例 (6):以*开头,以*结尾,但它为空,因此不会为斜体。

所以,我需要两个正则表达式。其中一个应选择以**开头并以不能为空且不在$ ... $组中的**结尾的那些。另一种是选择以*开头并以不能为空且不在$ ... $组中的*结尾的那些。

要选择以*开头并以不能为空且不在$ ... $组中的*结尾的那些:

您可以使用此正则表达式:

(?<!*)*[^*s]+*(?!*)(?=(?:(?:[^$]*$){2})*[^$]*$)

正则表达式演示

正则表达式详细信息:

  • (?<!*): 如果前一个角色是*,则负回头看以失败匹配
  • *: 比赛开场*
  • [^*s]+:匹配任何不是*和空格的字符的 1+
  • *: 比赛结束*
  • (?!*):如果下一个角色是*,则为负预测,
  • 则匹配失败
  • (?=(?:(?:[^$]*$){2})*[^$]*$):向前看以断言 0 对或更多对$..$,以确保我们内部不匹配$...$

如果要匹配$...$内的单星文本,请使用:

(?<!*)*[^*s]+*(?!*)(?!(?:(?:[^$]*$){2})*[^$]*$)

正则表达式演示 2

最新更新