Regexp-replace:匹配中的多个替换

tra*_*max 6 regex replace notepad++ t4mvc

我正在将我们的MVC3项目转换为使用T4MVC.我想替换java-script包也可以使用T4MVC.所以我需要更换

"~/Scripts/DataTables/TableTools/TableTools.min.js"
"~/Scripts/jquery-ui-1.8.24.min.js"
Run Code Online (Sandbox Code Playgroud)

Scripts.DataTables.TableTools.TableTools_min_js
Scripts.jquery_ui_1_8_24_min_js
Run Code Online (Sandbox Code Playgroud)

我目前正在使用Notepad ++作为regexp工具,它正在使用POSIX正则表达式.我可以找到脚本名称并将其替换为这些正则表达式:

找: \("~/Scripts/(.*)"\)

用...来代替 \(Scripts.\1\)

但我无法弄清楚如何将文件名中的点和短划线替换为下划线并将正斜杠替换为点.

我可以检查js-filename在名称中有点或短划线

 \("~/Scripts/(?=\.*)(?=\-*).*"\)
Run Code Online (Sandbox Code Playgroud)

但是如何替换组内的组?

需要在组内进行非贪婪替换,并且这些替换按顺序进行,因此转换为点的正斜杠不会在之后转换为下划线.

这是一个非关键问题,我已经手动完成了所有替换,但我认为我对regexp很好,所以这个问题让我感到困惑!

ps首选工具是Notepad ++,但任何POSIX正则表达式解决方案都可以 - )

pps 在这里你可以获得要替换的东西 的样本这里是目标文本

Nic*_*ick 3

我只会使用像RegexHero这样的网站

  1. 您可以将代码粘贴到目标字符串框中,然后放入(?<=(~/Script).*)[.-](?=(.*"[)]"))框中Regular Expression,并_ 放在框中Replacement String

  2. 替换完成后,单击Final String底部的 ,然后选择Move to target string and start a new expression

  3. 从那里粘贴(?<=(<script).*)("~/)(?=(.*[)]" ))|(?<=(Url.).*)(")(?=(.*(\)" )))Regular Expression框中并将Replacement String框留空。

  4. 替换完成后,单击Final String底部的 ,然后选择Move to target string and start a new expression

  5. 从那里粘贴(?<=(Script).*)[/](?=(.*[)]"))Regular Expression盒子中并.粘贴到Replacement String盒子中。

之后,Final String盒子里就会有你要找的东西。我不确定您可以解析多少文本的上限,但如果这是一个问题,它可能会被分解。我确信可能有更好的方法来做到这一点,但这往往是我处理此类事情的方式。我喜欢这个网站的原因之一是我不需要安装任何东西,所以我可以在任何地方快速完成。

编辑 1:根据评论,我已将步骤 3 移至步骤 5,并添加了新的步骤 3 和 4。我必须这样做,因为新的步骤 5 会将 in 替换/"~/Scripts.从而破坏了 的删除"~/。我还必须更改第 5 步的代码以适应更改后的开头Script