我正在尝试进行自定义 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})*[^$]*$)
正则表达式详细信息:
-
(?<!\*)
:如果前一个字符是*
,则负向后查找会使匹配失败 -
\*
:比赛开场*
-
[^*\s]+
:匹配 1+ 任何不是*
的字符而不是空格 -
\*
:比赛结束*
-
(?!\*)
:如果下一个字符是*
,则负向前瞻会使匹配失败 -
(?=(?:(?:[^$]*\$){2})*[^$]*$)
:先行断言 0 或多对$..$
提前确保我们在$...$
内不匹配
如果您想匹配$...$
内部的单星文本使用:
(?<!\*)\*[^*\s]+\*(?!\*)(?!(?:(?:[^$]*\$){2})*[^$]*$)
关于javascript - 如何选择不能是组成员且在正则表达式中不为空的表达式进行 Markdown ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67717588/