Javascript 正则表达式仅在其他字符不存在时匹配结束字符

Javascript 正则表达式仅在其他字符不存在时匹配结束字符,javascript,regex,Javascript,Regex,我很难定义我需要的正则表达式 基本上,其思想是检测以、或结尾的所有行字符。为此,我定义了以下正则表达式: (,|;)$ 这很好,但是我有一个例外,如果在这行中有一个*字符(不一定以开头,但在某个位置),那么我不想检测匹配。基于此示例: /** * Here there's a comment I don't want to find, * but after this comment I do */ detectMe; other, 我打算找两组,第一组 /** * Here the

我很难定义我需要的正则表达式

基本上,其思想是检测以
结尾的所有行字符。为此,我定义了以下正则表达式:

(,|;)$
这很好,但是我有一个例外,如果在这行中有一个
*
字符(不一定以开头,但在某个位置),那么我不想检测匹配。基于此示例:

/**
 * 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*\*](.*?)(,|;)$

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

/^[^*]*?[,;]$/gm

它将首先匹配不是“
*
”的任意数量的字符,然后匹配“
”或“
'位于行的末尾。它使用
全局
多行
标志匹配所有行。

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

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

详细信息

  • (?:\/\*+[^*]*\*+(?:[^\/*][^*]*\*+)*\/\r?\n)?
    -可选(因为组后有一个
    量词)匹配
    • \/\*+[^*]*\*+(?:[^\/*][^*]*\*+)*\/
      -a
    • \r?\n
      -一个CRLF或LF结尾
  • *[;,]$
    -以
    结尾的整行
    $
    由于
    m
    修饰符,此处是线锚的末端)

删除太宽的
(.*)
,并使用
^([^*\r\n]*)[,;]$
从整行中排除
*
。还要注意Javascript有两个字符串方法:
string.prototype.endsWith()
string.prototype.includes()
。如果您要解释文本主体(即代码),您可能会发现阅读解析器和词法分析非常有用。这里有一个很好的介绍:您想匹配可选的C注释和以下以
结尾的行吗
?瞧。@WiktorStribiżew这正是我需要的!你能把它作为一个答案贴出来,这样我就可以标记它并放弃投票了吗?工作起来很有魅力现在我正试图打破它,并了解它这几乎是我所需要的!事实上,它匹配正确的行,问题是现在注释没有包含在第一个匹配中,而是被丢弃。就像这样,我得到了“detectMe;”这里没有“/***我不想找到一条评论,*但是在这条评论之后我找到了*/detectMe;”你说,你不想找到他们。这不意味着他们不应该匹配吗?