Я не уверен, что вы можете сделать это с помощью одного регулярного выражения, и вам, вероятно, придется сделать это в два этапа.Сначала вы можете захватить три заглавные буквы, используя метод substring()
, а затем заменить все косые черты теми тремя буквами, которые появляются в начале символа после первой точки.Вот демоверсия с кодом JS,
function transformLine(s) {
var repStr = s.substring(1,4);
var replacedStr = s.replace(/\//g, repStr);
return replacedStr.substring(1,replacedStr.length);
}
var lines = [".PMC.89569XX/90051XX/90204XX/89533XX/90554XX/90053XX/90215XX/89874XX/89974XX/90481XX/90221XX/90508XX/90183XX/88526XX/89843XX/88041XX/90446XX/88515XX/89574XX/89847XX/88616XX/90513XX/90015XX/90334XX/89649XX.T00", ".PAJ.77998XX/77896XX.T00", ".PAG.78116XX/78104XX/77682XX/07616XX/77663XX/77863XX/07634XX/78088XX/77746XX/78148XX.T00", ".PKC.22762XX/22358XX/22055XX/22672XX/22684XX/22154XX/22608XX/22768XX/22632XX/22266XX/22714XX/22658XX/22631XX/22288XX/22020XX/22735XX/22269XX/22138XX/22331XX/22387XX/22070XX/22636XX/22629XX/22487XX/22725XX.T00"];
for (var i = 0;i<lines.length;i++) {
console.log("Before: " + lines[i]);
console.log("After: " + transformLine(lines[i])+"\n\n");
}
Я заменил первую точку, поскольку у ожидаемого результата ее нет.
Дайте мне знать, если это работает для вас.
Редактировать:
Я обновил код, предоставив функцию, которая принимает строку в качестве входных данных и возвращает измененную строку.Пожалуйста, ознакомьтесь с демонстрацией.
Edit2: решение в основном с использованием регулярных выражений
Этот один вкладыш в функции выполняет всю работу за вас по преобразованию вашей строки в требуемую..
function transformLine(s) {
return s.replace(/\//g, /^.(.{3})/.exec(s)[1]).replace(/^./,'');
}
var lines = [".PMC.89569XX/90051XX/90204XX/89533XX/90554XX/90053XX/90215XX/89874XX/89974XX/90481XX/90221XX/90508XX/90183XX/88526XX/89843XX/88041XX/90446XX/88515XX/89574XX/89847XX/88616XX/90513XX/90015XX/90334XX/89649XX.T00", ".PAJ.77998XX/77896XX.T00", ".PAG.78116XX/78104XX/77682XX/07616XX/77663XX/77863XX/07634XX/78088XX/77746XX/78148XX.T00", ".PKC.22762XX/22358XX/22055XX/22672XX/22684XX/22154XX/22608XX/22768XX/22632XX/22266XX/22714XX/22658XX/22631XX/22288XX/22020XX/22735XX/22269XX/22138XX/22331XX/22387XX/22070XX/22636XX/22629XX/22487XX/22725XX.T00"];
for (var i = 0;i<lines.length;i++) {
console.log("Before: " + lines[i]);
console.log("After: " + transformLine(lines[i])+"\n\n");
}
Как вы видите здесь, эта строка,
return s.replace(/\//g, /^.(.{3})/.exec(s)[1]).replace(/^./,'');
, выполняет всю необходимую работу.Сначала он извлекает три заглавные буквы, используя /^.(.{3})/.exec(s)[1]
, затем все слэши заменяются этим захваченным словом, а затем, наконец, первый символ, который является точкой, удаляется с помощью этого /^./,''
и, наконец, возвращает нужную вам строку.
Дайте мне знать, если это то, что вы хотели.В противном случае, дайте мне знать, если вы хотите этого каким-либо другим способом.