I’m converting our MVC3 project to use T4MVC. And I would like to replace java-script includes to work with T4MVC as well. So I need to replace
"~/Scripts/DataTables/TableTools/TableTools.min.js"
"~/Scripts/jquery-ui-1.8.24.min.js"
Into
Scripts.DataTables.TableTools.TableTools_min_js
Scripts.jquery_ui_1_8_24_min_js
I’m using Notepad++ as a regexp tool at the moment, and it is using POSIX regexps.
I can find script name and replace it with these regexps:
Find: \("~/Scripts/(.*)"\)
Replace with \(Scripts.\1\)
But I can’t figure out how do I replace dots and dashes in the file names into underscores and replace forward slashes into dots.
I can check that js-filename have dot or dash in a name with this
\("~/Scripts/(?=\.*)(?=\-*).*"\)
But how do I replace groups within a group?
Need to have non-greedy replacement within group, and have these replacements going in an order, so forward slashes converted into a dot will not be converted to underscore afterwards.
This is a non-critical problem, I’ve already done all the replacements manually, but I thought I’m good with regexp, so this problem bugs me!!
p.s. preferred tool is Notepad++, but any POSIX regexp solution would do -)
p.p.s. Here you can get a sample of stuff to be replaced
And here is the the target text
I would just use a site like RegexHero
You can past the code into the target string box, then place
(?<=(~/Script).*)[.-](?=(.*"[)]"))into theRegular Expressionbox, with_in theReplacement Stringbox.Once the replace is done, click on
Final Stringat the bottom, and selectMove to target string and start a new expression.From there, Paste
(?<=(<script).*)("~/)(?=(.*[)]" ))|(?<=(Url.).*)(")(?=(.*(\)" )))into theRegular Expressionbox and leave theReplacement Stringbox empty.Once the replace is done, click on
Final Stringat the bottom, and selectMove to target string and start a new expression.From there paste
(?<=(Script).*)[/](?=(.*[)]"))into theRegular Expressionbox and.into theReplacement Stringbox.After that, the
Final Stringbox will have what you are looking for. I’m not sure the upper limits of how much text you can parse, but it could be broken up if that’s an issue. I’m sure there might be better ways to do it, but this tends to be the way I go about things like this. One reason I like this site, is because I don’t have to install anything, so I can do it anywhere quickly.Edit 1: Per the comments, I have moved step 3 to Step 5 and added new steps 3 and 4. I had to do it this way, because new Step 5 would have replaced the
/in"~/Scriptswith a., breaking the removal of"~/. I also had to change Step 5’s code to account for the changed beginning ofScript