Regex, соответствует "private function", "public function" или просто "function" - PullRequest
0 голосов
/ 07 апреля 2010

У меня возникают проблемы при использовании этого регулярного выражения:

(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.

EDIT:

Хорошо, ответы сработали, но теперь проблема в том, что последний параметр возвращает «sendMsg (text);} закрытая функция sendMsg (text) {alert (text);}", она не останавливается в первом » } "

Ответы [ 3 ]

3 голосов
/ 07 апреля 2010

на самом деле, это было неправильно или, по крайней мере, вводило в заблуждение

см. Regex захватывает всю строку для улучшенной версии

| имеет очень низкий приоритет, вы, вероятно, хотите

(public + function) | (private + function) | (function)

или даже

(public | private +)? Function

В качестве примечания, regexp - не лучший инструмент для разбора грамматик языков программирования. Например, решение регулярного выражения завершится с ошибкой на что-то вроде

var foo = "private function";

1 голос
/ 07 апреля 2010

Будет ли что-то подобное тому, что вы ищете?

 (public |private +)?function

Это проверит для общего, частного и ? означает, что они являются необязательными, поэтому будет работать только function. Только что проверил это с помощью regexpal.com

0 голосов
/ 07 апреля 2010

Попробуйте

(public | private)?\sfunction

Осторожно, это может совпадать: private private public private public function function. Если вы можете быть уверены, что код «чистый» и не имеет таких сценариев, используйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...