如何批量替换剃须刀助手的HTML(可能使用模式的resharper搜索)?

时间:2017-05-23 12:16:57

标签: visual-studio razor resharper

我在剃刀页面上有一些重复的HTML,我想用剃须刀助手替换它。我正在使用2017年的resharper,我希望按模式搜索功能可以节省一些时间,但我无法解决如何让它按照我的意愿行事。我不确定我是否试图将它用于错误的目的,或者我是否只是使用它。

这是我要替换的HTML的一小部分:

<li role="presentation" data-bind="visible: includeMtbf">
    <a href="#mtbf-tab" role="tab" data-toggle="tab">Rolling and Monthly MTBF</a>
</li>
<li role="presentation" data-bind="visible: includeMtbfWithoutMonthly">
    <a href="#rolling-mtbf-tab" role="tab" data-toggle="tab">Rolling MTBF</a>
</li>
<li role="presentation" data-bind="visible: includeMtbfByArea">
    <a href="#mtbf-by-location-tab" role="tab" data-toggle="tab">Rolling MTBF by Location</a>
</li>

我写了下面的剃刀助手:

@helper BuildTab(string tabId, string inclusionVariable, string tabText)
{
    <li role="presentation" data-bind="visible: @inclusionVariable">
        <a href="#@tabId" role="tab" data-toggle="tab">@tabText</a>
    </li>  
}

现在我只需要调用帮助程序来替换原始HTML:

@BuildTab("mtbf-tab", "includeMtbf", "Rolling and Monthly MTBF")
@BuildTab("rolling-mtbf-tab", "includeMtbfWithoutMonthly", "Rolling MTBF")
@BuildTab("mtbf-by-location-tab", "includeMtbfByArea", "Rolling MTBF by Location")

为了澄清我想要实现的目标,我手动完成了它们,但有没有办法让resharper(或视觉工作室)为我做这个?

我已经为resharper编写了以下搜索模式:

<li role="presentation" data-bind="visible: $inclusionVariable$">
    <a href="#$tabId$" role="tab" data-toggle="tab">$tabText$</a>
</li>

但我无法弄清楚如何设置占位符类型以匹配可能出现的任意文本。将它们设置为内容占位符后,它们无法正确匹配,但其他类型似乎都不合适。这是否可行(使用resharper或我不了解的视觉工作室功能)?

1 个答案:

答案 0 :(得分:1)

我不相信resharper可以处理这个,但似乎是使用正则表达式在所有文件中查找和替换的情况。 像(未经测试)的东西: 找到模式

<li\s+role="presentation"\s+data-bind="visible:\s*(\w+)">\s*<a\s+href="#([\w\-]+)"\s+role="tab"\s+data-toggle="tab">([\w\s]+)</a>\s*</li>

替换模式

@BuildTab("$1", "$2", "$3")

所有这些都取决于您的原始代码的规则程度,但您可以修改搜索正则表达式以处理不规则性。