Если число путей произвольно, то вам нужен двухэтапный подход:
Сначала , удалите все "неинтересные вещи" из строки.
Найдите .*?/\d+/([^/]+/?)
и замените все на $1
.
В С #: resultString = Regex.Replace(subjectString, @".*?/\d+/([^/]+/?)", "$1");
В JavaScript: result = subject.replace(/.*?\/\d+\/([^\/]+\/?)/g, "$1");
Это преобразует вашу строку в VOBSWeb/VobsWebUI/VaultWeb/func.js
.
Second , скопируйте имя файла в начало строки.
Найдите (.*/)([^/]+)$
и замените на $2;$1$2
.
C #: resultString = Regex.Replace(subjectString, "(.*/)([^/]+)$", "$2;$1$2");
JavaScript: result = subject.replace(/(.*\/)([^\/]+)$/g, "$2;$1$2");
Это преобразует результат предыдущей операции в func.js;VOBSWeb/VobsWebUI/VaultWeb/func.js
Если число путей постоянно, то вы можете сделать это в одном регулярном выражении:
Поиск ^.*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+)
и заменить на $4;$1$2$3$4
.
C #: resultString = Regex.Replace(subjectString, @"^.*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+)", "$4;$1$2$3$4");
JavaScript: result = subject.replace(/^.*?\/\d+\/([^\/]+\/).*?\/\d+\/([^\/]+\/).*?\/\d+\/([^\/]+\/).*?\/\d+\/([^\/]+)/g, "$4;$1$2$3$4");
Это регулярное выражение будет неэффективным, если строка не соответствует; это можно улучшить с помощью атомарной группировки, но JavaScript не поддерживает это.