使用正则表达式

时间:2017-10-11 13:46:23

标签: regex extjs sublimetext3

上下文

我有一个进程,包含创建类似的文件/文件名结构,里面有自己的名字,这样的事情,我每天都这样做,我看到这是重复的,有一个模式,然后我得到了创建Sublime Text的Snippet为我生成代码的想法,为我的表现添加了显着的改进。

实施例

有一个完整“模型”的例子,使用我所说的结构:

Ext.define('App.model.geral.layouts.Layouts', {
    extend: 'App.ux.model.base',

    fields: [
        { name: 'Foo', type: 'string', fieldLabel: 'Foo' },
        { name: 'Bar', type: 'int', fieldLabel: 'Bar' },
        { name: 'FooTwo', type: 'boolean', fieldLabel: 'FooTwo' },
        { name: 'Date', type: 'date', fieldLabel: 'Date' },
    ],

    proxy: Use.util.Model.getProxy({
        controller: 'Layouts'
    })
});

这是一个使用矿井结构的简单小样本文件。因此,遵循模式的文件将放在C:/Dev/Com/app/model/geral/layouts/Layouts.js,因为模型位于文件夹模型内, geral 是实体的模块布局属于。

我尝试了什么

我尝试了各种各样的事情,我做的最远的是那个片段文件:

<snippet>
    <content><![CDATA[
Ext.define('App.model.${TM_FILEPATH/.+(?:model\/)(.+)\.\w+/\l$1/}', {
    extend: '',

    fields: [ ],

    proxy: '' 
});
]]></content>
    <tabTrigger>mitem</tabTrigger>
</snippet>

当我在名为C:/Dev/Com/app/model/geral/layouts/Layouts.js的{​​{1}}(作为模式)的空文件上触发该片段时,结果为:

Ext.define('App.model.geral/layouts/Layouts', {
    extend: '',

    fields: [ ],

    proxy: '' 
});

正如你所看到的,我得到了'App.model.geral/layouts/Layouts'而不是'App.model.geral.layouts.Layouts'这就是我想要的。我接近我想要的最终结果,正如你在完整的模型示例中看到的那样,通过我不能远远超过那个方式,我对RegExp没有任何了解我所做的只是研究和尝试不同的事情。 / p>

如果有帮助,我会发现有关Sublime Snippets的更完整信息:

$PARAM1 .. $PARAMn  Arguments passed to the insert_snippet command. (Not covered here.)
$SELECTION  The text that was selected when the snippet was triggered.
$TM_CURRENT_LINE    Content of the cursor’s line when the snippet was triggered.
$TM_CURRENT_WORD    Word under the cursor when the snippet was triggered.
$TM_FILENAME    Name of the file being edited, including extension.
$TM_FILEPATH    Path to the file being edited.
$TM_FULLNAME    User’s user name.
$TM_LINE_INDEX  Column where the snippet is being inserted, 0 based.
$TM_LINE_NUMBER Row where the snippet is being inserted, 1 based.
$TM_SELECTED_TEXT   An alias for $SELECTION.
$TM_SOFT_TABS   YES if translate_tabs_to_spaces is true, otherwise NO.
$TM_TAB_SIZE    Spaces per-tab (controlled by the tab_size option).

我使用该信息来获取文件路径,我尝试使用其他变量,如文件名,但没有那么远。

如果有人可以帮助我达到最终结果,这将非常有用。

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式实现您想要的目标:

text.another

顺便说一句,我强烈建议您安装PackageDev package(如果尚未安装),以便在代码段和正则表达式/替换上获得一些语法高亮显示。 how the snippet looks

工作原理:

匹配度:

  • standard从文件路径的开头到<?php $category_object = get_queried_object(); $category_taxonomy = $category_object->taxonomy; $category_term_id = $category_object->term_id; $min_bed = array( '1000', '4000' ); $min_bath = array( '2000', '3200' ); $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'type' => 'tm-property', 'post_status' => 'publish', 'posts_per_page' => 10, 'paged' => $paged, 'caller_get_posts' => -1, 'meta_query' => array( 'relation' => 'AND', array( 'key' => '_tm_property_bedrooms', 'value' => $min_bed, 'type' => 'numeric', 'compare' => 'BETWEEN', ), array( 'key' => '_tm_property_bathrooms', 'value' => $min_bath, 'type' => 'numeric', 'compare' => 'BETWEEN', ), ), 'tax_query' => array( array( 'taxonomy' => 'tm-property_type', 'field' => 'id', 'terms' => $category_term_id ) ), 'orderby' => 'name', 'order' => 'DESC', ); $custom_posts = null; $custom_posts = new WP_Query($args); if( $custom_posts->have_posts() ) : while ($custom_posts->have_posts()) : $custom_posts->the_post(); echo get_the_title( $post->ID ); endwhile; endif; wp_reset_query($custom_posts); ?> 匹配,并存储在捕获组1中
  • <snippet> <content><![CDATA[ Ext.define('App.model.${TM_FILEPATH/(^.+\/model\/)|(\w+)|(\.\w+$)|(\/)/(?2$2)(?4.)/g}', { extend: '', fields: [ ], proxy: '' }); ]]></content> <tabTrigger>mitem</tabTrigger> </snippet>
  • (^.+\/model\/)匹配任何单词字符序列并存储在捕获组2中
  • /model/
  • |匹配文件扩展名并存储在捕获组3中
  • (\w+)
  • |匹配(\.\w+$)并存储在捕获组4

替换:

  • |如果捕获组2参与了比赛,则将其替换为自己 - 即保持
  • (\/)如果捕获组4参与了比赛,请用点
  • 替换它

标志:

  • /全局修饰符以尽可能多地匹配

可以说你不需要捕获组1和3,但是我将它们包括在内以便更容易分辨出匹配的内容。