首页 > 解决方案 > WebStorm Live Template,分离一串输入

问题描述

我想为以下内容创建一个实时模板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 脚本并编写了以下内容,它在一个 groovy 操场上工作,但在 WebStorm 中得到的结果与我上面的最后一个示例相同!

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

标签: intellij-ideawebstormlive-templates

解决方案


这可以用 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+).

以下似乎对我来说很好用(someSelectorLive Template 变量在哪里):

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

推荐阅读