仅当不存在其他字符时,RegEx才匹配结束字符

时间:2018-10-04 18:46:11

标签: javascript regex

在定义我需要的regEx时遇到了很多麻烦。...

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

(,|;)$

这可以很好地工作,但是我有一个例外,那就是如果该行中有一个*字符(不一定从头开始,而是在某个位置),那么我就不想检测到该匹配项。根据此示例:

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

我打算找到2个小组,第一个小组

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

第二个

other,

我尝试了很多事情,例如未捕获组,否定前瞻以及以[^\s*\*]开头的字符串也没有成功。有办法吗?

我尝试过的一些regEx ...

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

2 个答案:

答案 0 :(得分:1)

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

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

请参见this regex demo

详细信息

  • (?:\/\*+[^*]*\*+(?:[^\/*][^*]*\*+)*\/\r?\n)?-可选(因为在该组之后有一个?量词)non-capturing group匹配1个或0个匹配项
  • .*[;,]$-以;,结尾的整行(由于$修饰符,m是行锚的结尾)。

答案 1 :(得分:0)

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

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

它将首先对任意数量的不是'*'的字符进行数学运算,然后在该行的末尾匹配','或';'。它使用globalmultiline标志来匹配所有行。