我在尝试使用此正则表达式时遇到了一些问题:
(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);}”,它不是在第一个停止“ }“
答案 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
。如果您可以确保代码“干净”并且没有这种情况,那么请使用它。