单个正则表达式,将camel-case更改为以破折号分隔的小写

dx_*_*_dt 5 regex pcre sublimetext-snippet

我正在尝试为javascript 语句编写SublimeText 代码段import.我希望格式格式如下:

import MyFooBar from 'my-foo-bar';
Run Code Online (Sandbox Code Playgroud)

我的正则表达式的输入是MyFooBar,输出需要my-foo-bar.我找到了一个几乎可以在Regex中使用的答案- CamelCase用下划线小写:

搜索

((?<=.)[A-Z][a-zA-Z]*)|((?<=[a-zA-Z])\d+)

用...来代替

-$1$2

答案说只是使用javascript的.toLowerCase()方法进行小写,但SublimeText片段使用perl,其中我有最简洁的知识.快速搜索说,对于小写,我可以\L在我更换的开始使用.

/((?<=.)[A-Z][a-zA-Z0-9]*)|((?<=[a-zA-Z])\d+)/\L-\1\2/g
Run Code Online (Sandbox Code Playgroud)

这适用于除第一段的角色以外的所有角色,因此MyFooBar变为My-foo-bar.

我想也许我可以按顺序运行两个正则表达式,但perl或Sublime都无法识别.

思考?

编辑:

当我说它使用perl时,我只是说它使用perl正则表达式.据我所知,我实际上无法执行任意代码; 我只能指定perl可以执行的正则表达式.

这是我的代码段的全文:

<snippet>
    <content><![CDATA[
import ${1:module} from '${2:./path/}${1/((?<=.)[A-Z][a-zA-Z0-9]*)|((?<=[a-zA-Z])\d+)/\L-\1\2/g}';
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>import</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>source.js</scope>
</snippet>
Run Code Online (Sandbox Code Playgroud)

rev*_*evo 1

我将 RegEx 更改为更有用且可能更简单的东西。

**更新

<snippet>
    <content><![CDATA[
import ${1:module} from '${2:./path/}${1/(^[A-Z][a-z]+|[a-z])([A-Z])/\L\1-\2/g}';
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>import</tabTrigger>
    <scope>source.js</scope>
</snippet>
Run Code Online (Sandbox Code Playgroud)

  • 可以通过将 `-\2` 更改为 `(?2-\2)` 来使其成为条件。完整的正则表达式行:`import ${1:module} from '${2:./path/}${1/(^[AZ][az]*|[az])([AZ])?/\ L\1(?2-\2)/g}';` (2认同)