首页 > 解决方案 > 正则表达式仅在其他字符不存在时匹配结束字符

问题描述

我在定义我需要的正则表达式时遇到了一些麻烦......

,基本上,这个想法是检测所有以 a或;字符结尾的行。为此,我定义了以下正则表达式:

(,|;)$

这适用于这个,但是我有一个例外,如果*该行中有一个字符(不一定从某个位置开始,而是在某个位置),那么我不想检测到那个匹配。基于此示例:

/**
 * Here there's a comment I don't want to find,
 * but after this comment I do
 */
detectMe;
other,

我打算找两组,第一组

/**
 * Here there's a comment I don't want to find,
 * but after this comment I do
 */
detectMe;

而第二个

other,

我尝试了很多事情,例如非捕获组、负面展望以及[^\s*\*]没有成功的字符串开头。有没有办法做到这一点?

我尝试过的一些正则表达式...

^[^\*](.*?)(,|;)$
^[^\s*\*](.*?)(,|;)$

标签: javascriptregex

解决方案


;要匹配可选的 C 注释和以or结尾的以下行,,您可以使用

/(?:\/\*+[^*]*\*+(?:[^\/*][^*]*\*+)*\/\r?\n)?.*[;,]$/gm

看到这个正则表达式演示

细节

  • (?:\/\*+[^*]*\*+(?:[^\/*][^*]*\*+)*\/\r?\n)?- 一个可选的(因为?组后面有一个量词)非捕获组匹配 1 或 0 次出现
    • \/\*+[^*]*\*+(?:[^\/*][^*]*\*+)*\/- C 注释模式
    • \r?\n- CRLF 或 LF 结尾
  • .*[;,]$- 以;或结尾的整行,$由于m修饰符,此处是行锚的结尾)。

推荐阅读