我正在尝试进行自定义降价。我也在$ ... $
组中使用 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