这个正则表达式怎么错?

时间:2010-12-28 20:49:28

标签: regex

我有一个正则表达式,我用它来匹配IDE(Sublime)中的用户函数。这匹配我想要的(函数名称本身),但它也匹配第一个括号。因此匹配如下:

此的 _myFunction( '内容');

注意开场的paran。

这是我的表达:

(?:[^\._])?([\w-]+)(?:[\(]){1}

如何排除开场paran的匹配?

作为一个额外的问题:我怎样才能成功匹配字符串:function,因为您可以期待function(匹配(在JS中不好玩)。

感谢能够提供帮助的任何人。

2 个答案:

答案 0 :(得分:2)

您可以使用(?=pattern)

  

零宽度正向前瞻断言。例如,                    “/ \ w +(?= \ t)/”匹配一个单词后跟一个标签,没有                    包括$&。

中的标签

所以,如果你将开放的paren包裹在(?=)而不是(?:)

答案 1 :(得分:1)

不幸的是,你不能真正使用正则表达式来解析任何无上下文语法,但希望这可以做得更好。它使用positive lookahead不包括匹配中的开头,但无论如何都要查找它:

(?:[^\._])?([\w-]+)(?=[\(])

如果你的IDE的正则表达式引擎支持负面的后观(在匹配之前子表达式),你可以避免匹配字符串'function'或“function”:

(?!<['"])(?:[^\._])?([\w-]+)(?=[\(])