正则表达式,匹配“私人功能”,“公共功能”或只是“功能”

时间:2010-04-06 22:44:02

标签: regex

我在尝试使用此正则表达式时遇到了一些问题:

(public +function|private +function|function) +([a-zA-Z_$][0-9a-zA-Z_$]*) *\\(([0-9a-zA-Z_$, ]*)\\) *{(.*)}

出于某种原因,$ 1和$ 2返回相同的值。

目标字符串是:

public function messenger(text){
    sendMsg(text);
}
private function sendMsg(text){
    alert(text);
}

我该如何解决?顺便说一句,我使用的是Javascript。

编辑:

好的,答案有效,但现在的问题是最后一个参数是返回“sendMsg(text);}私有函数sendMsg(text){alert(text);}”,它不是在第一个停止“ }“

3 个答案:

答案 0 :(得分:3)

实际上,这是错误的,或者至少是误导性的

请参阅Regex is capturing the whole string了解改进版

|优先级很低,你可能想要

(公共+功能)|(私人+功能)|(功能)

甚至

(public | private +)?function

作为旁注,regexp不是解析编程语言语法的最佳工具。例如,正则表达式解决方案将失败,如

var foo =“私人功能”;

答案 1 :(得分:1)

这样的事情会是你想要的吗?

 (public |private +)?function

这将检查公开,私有,?表示这些是可选的,因此只有function也可以使用。刚刚使用regexpal.com进行了测试

答案 2 :(得分:0)

尝试

(public | private)?\sfunction

当心,这可能匹配:private private public private public function function。如果您可以确保代码“干净”并且没有这种情况,那么请使用它。

相关问题