У меня есть регулярное выражение, которое я пытаюсь сопоставить с определенными параметрами функции. Я хочу иметь возможность стилизовать их определенным образом в языковом пакете.
Вот текст, который я пытаюсь сопоставить:
addFill(path:svgjs.Element, pattern:Pattern, docMaxSide:number) {
pathFillId(path)
}
В этом примере я хочу сопоставить слова «путь», «шаблон» и «docMaxSide» из параметров. Я хочу убедиться, что он НЕ соответствует слову «путь» во второй строке (где я вызываю pathFillId).
Вот мое текущее регулярное выражение: \(.*?(\w+):.*?\)
Сломано:
\(
Найдите открытые скобки
.*?
Перед ним может быть что-то, но после парных скобок
(\w+):
Записать слово перед двоеточием
.*?
После двоеточия может быть что-то еще
\)
Закрыть скобки
Прямо сейчас он будет соответствовать только первому элементу «путь». Но мне нужно, чтобы он соответствовал всем словам, которые я упомянул выше.
ОБНОВЛЕНИЕ: я должен был быть более конкретным. Он должен совпадать только в том случае, если это параметр функции. Например, я не хочу, чтобы path1
соответствовал следующему: var path1:string
. Сложность связана с регулярным выражением, которое сопоставляет элементы только между скобками.
2 ответа
Попробуй это:
\w+(?=:)
С модификатором g
(глобальный модификатор находит все элементы и не возвращает результат при первом совпадении)
См. Также пример
ОБНОВИТЬ
Если вы хотите сопоставить только параметры в скобках, вы можете сделать это:
\w+(?=:[\w.]+\s*[,)])
Вот пример для этого регулярного выражения .
var path2:string = "hello"
, но я хочу, чтобы он соответствовал только параметрам в функциях. Вот почему я включил материал о заключении в скобки. Какие-нибудь мысли?
Ваша проблема в этой части вашего регулярного выражения: .*?
. Итак, вы указываете, что хотите любой символ (.
), это правильно. Но тогда вы должны выбрать одно из *
и ?
- *
означает {0,}
, ?
означает {0,1}
.
Если это не помогает, вы можете протестировать свое регулярное выражение с помощью regexe.com или аналогичного.
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки строк, разбора и преобразования. Укажите язык (PHP, Python и т. д.) или инструмент (grep, VS Code, Google Analytics и т. д.), который вы используете. Не размещайте вопросы, требующие объяснения того, что означает символ или чему будет соответствовать конкретное регулярное выражение.
(\w+):
Получить соответствующую группу из индекса 1. DEMO. Какой язык вы используете?