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;”你说,你不想找到他们。这不意味着他们不应该匹配吗?