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

标签 javascript regex

我正在尝试进行自定义 Markdown 。我还将 katex 与 $ ... $ 组一起使用。但是当替换表达式时,如果它们在 $ ... $ 组中,我就必须不替换这些表达式。

示例:Lorem **Ipsum**(1) 是 *simply*(2) 打印和排版行业的虚拟文本。 Lorem Ipsum 自 1500 年代以来一直是行业标准虚拟文本,$\sqrt{2} **不得为粗体 **(3) *不得为斜体 *(4) $ ** **(5) **(6)...

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

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

最佳答案

To select the ones that start with * and end with * that cannot be empty and are not in the $ ... $ group:

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

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

RegEx Demo

正则表达式详细信息:

  • (?<!\*) :如果前一个字符是*,则负向后查找会使匹配失败
  • \* :比赛开场*
  • [^*\s]+ :匹配 1+ 任何不是 * 的字符而不是空格
  • \* :比赛结束*
  • (?!\*) :如果下一个字符是*,则负向前瞻会使匹配失败
  • (?=(?:(?:[^$]*\$){2})*[^$]*$) :先行断言 0 或多对 $..$提前确保我们在 $...$ 内不匹配

如果您想匹配$...$内部的单星文本使用:

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

RegEx Demo 2

关于javascript - 如何选择不能是组成员且在正则表达式中不为空的表达式进行 Markdown ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67717588/

相关文章:

javascript - 出现路径错误时如何选择复选框。我在 Cypress 做这个

Javascript 平滑方法链接

regex - 为什么在这种情况下正则表达式是懒惰的而不是贪婪的?

java - 允许一组字符并禁止其他字符的正则表达式

java - 使用 Select-String 和正则表达式从 Java 文件中获取方法签名

javascript - Jquery .data 在可放置区域中的可拖动元素上保持未定义状态

javascript - 使用 Moment.js 清理时间的最佳方法是什么?

javascript - 如何在 Javascript 不可用时显示内容,在 javascript 可用时隐藏它并且在任何一种情况下都不闪烁?

java - Java 中正则表达式的问题

javascript - 在 javascript keyup 函数中包含 javascript 代码块