【问题标题】:Using regular expression to cut/paste lines in sublime使用正则表达式在 sublime 中剪切/粘贴行
【发布时间】:2018-05-18 07:07:10
【问题描述】:

使用 sublime 或其他方法将“data-filter-tags”移动到上面一行的最佳方法是什么?

<div class="col-4">
   <a class="app-list__item">
        <div class="display-4" data-filter-tags="angle-down">
            <i class="fal fa-angle-down"></i>
        </div>
    </a>
</div>
<div class="col-4">
   <a class="app-list__item">
        <div class="display-4" data-filter-tags="angle-left">
            <i class="fal fa-angle-left"></i>
        </div>
    </a>
</div>

结果将如下所示:

<div class="col-4">
   <a class="app-list__item" data-filter-tags="angle-down">
        <div class="display-4">
            <i class="fal fa-angle-down"></i>
        </div>
    </a>
</div>
<div class="col-4">
   <a class="app-list__item" data-filter-tags="angle-left">
        <div class="display-4">
            <i class="fal fa-angle-left"></i>
        </div>
    </a>
</div>

【问题讨论】:

  • (&lt;[^&gt;]*)(&gt;\s*.*?)(\s*data-filter-tags="[^"]*") 替换为$1$3$2
  • 你能解释一下 $1$3$2 是什么
  • 它是对从原始模式组中捕获的文本的引用。我会将其作为答案发布,并附上更多说明,请给我几分钟时间。
  • 不客气!我在下面的答案中添加了解释。

标签: regex sublimetext2


【解决方案1】:

代码

See regex in use here

(<[^>]*)(>\s*.*?)(\s*data-filter-tags="[^"]*")

替换:$1$3$2


结果

输入

<div class="col-4">
   <a class="app-list__item">
        <div class="display-4" data-filter-tags="angle-down">
            <i class="fal fa-angle-down"></i>
        </div>
    </a>
</div>
<div class="col-4">
   <a class="app-list__item">
        <div class="display-4" data-filter-tags="angle-left">
            <i class="fal fa-angle-left"></i>
        </div>
    </a>
</div>

输出

<div class="col-4">
   <a class="app-list__item" data-filter-tags="angle-down">
        <div class="display-4">
            <i class="fal fa-angle-down"></i>
        </div>
    </a>
</div>
<div class="col-4">
   <a class="app-list__item" data-filter-tags="angle-left">
        <div class="display-4">
            <i class="fal fa-angle-left"></i>
        </div>
    </a>
</div>

说明

  • (&lt;[^&gt;]*) 将以下内容捕获到捕获组 1
    • &lt; 按字面意思匹配
    • [^&gt;]* 匹配除&gt; 之外的任何字符任意次数
  • (&gt;\s*.*?) 将以下内容捕获到捕获组 2
    • &gt; 从字面上匹配这个
    • \s* 匹配任意数量的空白字符
    • .*? 匹配任意字符任意次数,但尽可能少(不包括换行符)
  • (\s*data-filter-tags="[^"]*") 将以下内容捕获到捕获组 3
    • \s* 匹配任意数量的空白字符
    • data-filter-tags=" 从字面上匹配这个
    • [^"]* 匹配除" 之外的任何字符任意次数
    • " 按字面意思匹配

$1$3$2 的替换只是重新排序捕获的文本,以便第三个捕获组放置在第一个之后,但在第二个之前。

【讨论】:

  • 你确实为我节省了几个小时的工作时间,现在我可以把时间留给我的孩子们了 :) 在 3 分钟宽限期后接受你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多