У меня есть регулярное выражение, которое я пытаюсь сопоставить с определенными параметрами функции. Я хочу иметь возможность стилизовать их определенным образом в языковом пакете.

Вот текст, который я пытаюсь сопоставить:

addFill(path:svgjs.Element, pattern:Pattern, docMaxSide:number) {
    pathFillId(path)
}

В этом примере я хочу сопоставить слова «путь», «шаблон» и «docMaxSide» из параметров. Я хочу убедиться, что он НЕ соответствует слову «путь» во второй строке (где я вызываю pathFillId).

Вот мое текущее регулярное выражение: \(.*?(\w+):.*?\)

Сломано:

\( Найдите открытые скобки

.*? Перед ним может быть что-то, но после парных скобок

(\w+): Записать слово перед двоеточием

.*? После двоеточия может быть что-то еще

\) Закрыть скобки

Прямо сейчас он будет соответствовать только первому элементу «путь». Но мне нужно, чтобы он соответствовал всем словам, которые я упомянул выше.

ОБНОВЛЕНИЕ: я должен был быть более конкретным. Он должен совпадать только в том случае, если это параметр функции. Например, я не хочу, чтобы path1 соответствовал следующему: var path1:string. Сложность связана с регулярным выражением, которое сопоставляет элементы только между скобками.

0
isaachess 10 Окт 2014 в 22:04
(\w+): Получить соответствующую группу из индекса 1. DEMO. Какой язык вы используете?
 – 
Braj
10 Окт 2014 в 22:14
Брадж, посмотри мое обновление.
 – 
isaachess
10 Окт 2014 в 23:44

2 ответа

Лучший ответ

Попробуй это:

\w+(?=:)

С модификатором g (глобальный модификатор находит все элементы и не возвращает результат при первом совпадении)


См. Также пример



ОБНОВИТЬ

Если вы хотите сопоставить только параметры в скобках, вы можете сделать это:

\w+(?=:[\w.]+\s*[,)])


Вот пример для этого регулярного выражения .

1
friedi 11 Окт 2014 в 00:28
Супер близко! Это работает для примера, который я дал (я только что посмотрел обходные пути, круто), но это слишком свободно для всех случаев. Он также соответствует 'path2' в var path2:string = "hello", но я хочу, чтобы он соответствовал только параметрам в функциях. Вот почему я включил материал о заключении в скобки. Какие-нибудь мысли?
 – 
isaachess
10 Окт 2014 в 23:40
Потрясающий. Большое спасибо. Теперь мне просто нужно разобрать его, чтобы понять, что там происходит. :)
 – 
isaachess
11 Окт 2014 в 00:31

Ваша проблема в этой части вашего регулярного выражения: .*?. Итак, вы указываете, что хотите любой символ (.), это правильно. Но тогда вы должны выбрать одно из * и ? - * означает {0,}, ? означает {0,1}.

Если это не помогает, вы можете протестировать свое регулярное выражение с помощью regexe.com или аналогичного.

0
msrd0 10 Окт 2014 в 22:07