【发布时间】:2016-01-27 18:53:33
【问题描述】:
我正在尝试为 javascript import 语句编写 SublimeText snippet。我希望格式格式如下:
import MyFooBar from 'my-foo-bar';
我的正则表达式的输入是MyFooBar,输出需要是my-foo-bar。我找到了一个几乎适用于Regex - CamelCase to lower case with underscores的答案:
搜索
((?<=.)[A-Z][a-zA-Z]*)|((?<=[a-zA-Z])\d+)替换为
-$1$2
答案说只使用javascript的.toLowerCase()方法进行小写,但SublimeText sn-ps使用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 可以执行的正则表达式。
这是我的 sn-p 的全文:
<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>
【问题讨论】:
-
为什么必须成为一个正则表达式?这将更容易通过适当的搜索和替换功能来处理,perl 具有...
-
@cat 我只是在学习如何创建 sn-ps,但 sublimetext.info/docs/en/extensibility/… 只显示了一种替换方法。
-
@anubhava OPs 最后一句话是这里的问题。您运行 2 个正则表达式来纠正第一个字符上的“错误”,这显然不起作用。
-
能否上传您当前的完整sn-p?
-
@revo 我已经更新了问题
标签: regex pcre sublimetext-snippet