我正在尝试编写一个SublimeText的代码片段,用于JavaScript的import
语句。我希望格式如下:
import MyFooBar from 'my-foo-bar';
我的正则表达式输入是
MyFooBar
,输出需要是my-foo-bar
。我在Regex - CamelCase to lower case with underscores中找到了一个几乎可行的答案:
答案说只需使用JavaScript的搜索
((?<=.)[A-Z][a-zA-Z]*)|((?<=[a-zA-Z])\d+)
替换为
-\L$1$2
.toLowerCase()
方法进行小写处理,但SublimeText片段使用perl,而我对perl知之甚少。快速搜索发现,我可以在替换的开头使用\L
来进行小写处理。/((?<=.)[A-Z][a-zA-Z0-9]*)|((?<=[a-zA-Z])\d+)/\L-\1\2/g
这段代码对除第一个字符段外的所有字符段都有效,所以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>