Regex 条件正则表达式问题

Regex 条件正则表达式问题,regex,Regex,我有一个正则表达式的问题,我想我在正则表达式的实际工作方式上遗漏了一点 我有一些包含方法定义的字符串集 myMethod1() myMethod2(argument1 arg1) myMethod3(参数1 arg1,参数2 arg2) 但其中一些还包含输出类型: myOtherMethod1():类型1 myOtherMethod2(argument1 arg1):类型2 myOtherMethod3(argument1 arg1,argument2 arg2):随便什么 我只想要像第

我有一个正则表达式的问题,我想我在正则表达式的实际工作方式上遗漏了一点

我有一些包含方法定义的字符串集

  • myMethod1()
  • myMethod2(argument1 arg1)
  • myMethod3(参数1 arg1,参数2 arg2)
但其中一些还包含输出类型:

  • myOtherMethod1():类型1
  • myOtherMethod2(argument1 arg1):类型2
  • myOtherMethod3(argument1 arg1,argument2 arg2):随便什么
我只想要像第一个一样的输入:去掉输出参数。 我拿出了我的正则表达式帽子,我想出了一些有条件的正则表达式:

(?([:]+)(.+(?=\s:))|(.+))
如果我匹配字符串中的“:”字符,则取“:”之前的任何字符,如果不匹配,则取全部。 理论上这是正确的,但它返回整行 如果我把正则表达式改为

(?([:]*)(.+(?=\s:))|(.+))
然后第二类方法被正确地正则化了,但第一类方法没有(奇怪..)。 你能解释一下我的错误在哪里吗


非常感谢,没有必要这样处理。只需使用您遇到的右括号中的第一个:

/^[^)]*\)/

除非我误解了你的问题…

我不知道你的正则表达式有什么问题。我会使用一个更简单的正则表达式,并与您想要的匹配:

^.*\)
这与行的开头匹配,后跟任意字符,后跟
后面可能有文本这一事实与此无关

我想出了
^(.*?\).$

这将匹配字符串的开头(
^
),后跟第一个右括号内的所有字符(
*?
是惰性匹配,因此它将匹配第一个
(转义字符串需要
\)
)。该行的其余部分将被忽略(
*$
)-请使用多行选项,否则将只匹配第一部分。
额外的括号是捕获组,因此您可以使用$1作为替换。

实际上您的解决方案非常有效,我解决问题的方法不是很好。谢谢我仍然不明白为什么我的正则表达式不起作用,理论上它应该是对的?不。我想你可能想在条件语句之前使用
*
(即
(?(.[:]*)…
)。当然你不需要
[:]
,因为这与
((.:+)(.+(((?=\s:))|(.+)')一样(应用这两个注释的修改版本也不起作用。它有两个匹配项:例如“myOtherMethod1():type1”给出了两个匹配项:“myOtherMethod1()”和“type1”@Srodriguez,完全符合它的要求。删除最后一组(
)(.+)
)以不匹配“type1”部分。