WebStorm Live Template, разделите строку входных данных

0

Я хочу создать Живой шаблон для createSelector:

export const someSelector = createSelector(getThis, getThat, getSomethingElse, (this, that, somethingElse) => 
  $END$
)

Я могу заставить его работать очень хорошо с одним аргументом (например, только getThisкоторый затем приводит (this)к args функции стрелки).

// template text
createSelector($someSelector$, ($variable$) => $END$)

// variables
// expression for "variable": 
decapitalize(regularExpression(someSelector, "get", ""))

Это правильно работает с одним аргументом, как упомянуто выше, и почти правильно работает с несколькими аргументами, за исключением заглавных букв:

createSelector(getThis, getThat, getSomethingElse, (this, That, SomethingElse) => /* $end$ */)

Я попытался обернуть все это, camelCaseно, конечно, запятые и пробелы исчезли.

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

Я пробовал группы захвата, которые, как мне казалось, сработают:

decapitalize(regularExpression(someSelector, "get(\w+)", "$1"))

Но это ничего не заменяет, а просто копирует все:

createSelector(getThis, getThat, (getThis, getThat) => )

Есть ли способ добиться этого?

ОБНОВЛЕНИЕ: я даже изучил сценарий Groovy и написал следующее, которое работает на отличной игровой площадке, но в WebStorm дает тот же результат, что и мой последний пример выше!

groovyScript("return _1.replaceAll(/get(\w+)/) { it[1].uncapitalize() };", someSelector)
3
  • regularExpression()Поддерживает ли Java (или быть точным ) \l$1шаблон замены? Живой тест: regex101.com/r/6faVqC/1 Наверное, нет ... regular-expressions.info/refreplacecase.html
    LazyOne
    2 дня назад
  • 1
    «Но это ничего не заменяет, это просто копирует все»: « Не забудьте уйти \ в двойные кавычки "-regularExpression(someSelector, "get(\\w+)", "$1")
    LazyOne
    2 дня назад
  • @LazyOne вот и все! Не стесняйтесь размещать его как ответ, чтобы я мог отметить его как таковой. 2 дня назад
3

Это можно сделать с помощью RegEx .. но Java, похоже, не поддерживает \lмодификатор замены (который будет использоваться \l$1вместо $1в исходном regularExpression()коде).

Живой пример (работает в PCRE2, например, в PHP): https://regex101.com/r/6faVqC/1

Документы по модификаторам замены: https://www.regular-expressions.info/refreplacecase.html


В любом случае: все это обрабатывается Java, и вы передаете шаблон RegEx или код GrovyScript в двойных кавычках. Следовательно \, необходимо экранировать любые символы.

Вам нужно заменить get(\w+)на get(\\w+).

Следующее, кажется, отлично работает для меня здесь (где someSelectorнаходится переменная Live Template):

groovyScript("return _1.replaceAll(/get(\\w+)/) { it[1].uncapitalize() };", someSelector)