忽略正则表达式匹配中的子字符串

时间:2014-07-13 11:46:09

标签: regex substring notepad++

我正在为Notepad ++编写函数列表解析器以添加对Nasal的支持。

我使用以下正则表达式:

^[\t ]*(var[\n\s]+)?([_A-Za-z]?[\w_]*)[\n\s]*=[\n\s]*func[\n\s]*(\([^\)\(]*\))?Debuggex Demo

...匹配这两种类型的有效声明:

  1. foo = func...
  2. var foo = func...
  3. 为了从这个正则表达式的匹配中进一步提取函数名foo,我能想到的最好的是:

    (var[\n\s]+)?([_A-Za-z]?[\w_]*)Debuggex Demo

    使用此匹配" foo"或者" var foo",视情况而定。什么是正则表达式可以忽略子串var[\n\s]+]的存在,所以它只提取" foo"对于功能列表?

    非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用\K功能删除匹配结果左侧的所有内容:

(?:var\s+)?\K([A-Za-z_]\w*)\s*=\s*([A-Za-z_]\w*)

(请注意,此功能仅适用于最新版本的np ++)

答案 1 :(得分:0)

从索引2获取匹配的组。

(\bvar\b)?\s\s*(\w+)\s\s*=\s\s*func\b

Online demo