2017-01-09 3 views
0

Я читаю из текстового файла, который содержит много строк, содержащих такие заполнители, как это: «{name_of_placeholder}». Существует еще один файл, похожий на карту - ключи - это имена каждого заполнителя, и для каждого из них есть значение. Я хотел бы использовать regex для поиска каждого заполнителя в первом файле и заменить {name_of_placeholder} на соответствующее значение из второго файла.Повторное использование захваченной группы за пределами строки регулярного выражения

Первое, что мне пришло в голову, - захватить группу между «{}», но как использовать ее за пределами строки? Если это невозможно, может быть, кто-то может подумать о другом способе этого?

Заранее благодарен!

+0

1) какой язык вы используете? 2) Каков точный формат во 2-м файле 3) введите правильную строку ввода из файла 1 и файла 2 –

+0

1) Я бы хотел, чтобы эта замена заполнителей выполнялась сценарием powershell. 2) Второй файл представляет собой XML, содержащий строки с кодировкой base64. 3) Вот из первого файла: get {return "{ApplicationTitle}"; } И со второго: cmFuZG9taW5wdXRsaW5l

ответ

0

Хотя вы не определили язык, но независимо от языка, вы можете попробовать следующий подход:

var dict={} 
 
const regex1 = /(.*)=(.*)/gm; 
 

 
// let str1 be the second file (dictionary) 
 
const str1 = `abc1=1 
 
abc2=2 
 
abc3=3 
 
abc4=4 
 
abc5=5 
 
abc6=6 
 
abc7=7 
 
abc8=8 
 
abc9=9 
 
abc10=10 
 
abc11=11 
 
abc12=12`; 
 
let m1; 
 

 
while ((m1 = regex1.exec(str1)) !== null) { 
 
    if (m1.index === regex1.lastIndex) { 
 
     regex1.lastIndex++; 
 
    } 
 
    dict[m1[1]]=m1[2]; 
 
} 
 
//console.log(dict); 
 

 

 

 
const regex = /\{(.*?)\}/gm; 
 
// let str be the first file where you want the replace operation on {key...} 
 
var str = `adfas{abc1} asfasdf 
 
asdf {abc3} asdfasdf 
 
asdfas {abc5} asdfasdf 
 
asdfas{abc7} asdfasdfadf 
 
piq asdfj asdf 
 
`; 
 
let m; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
    if (m.index === regex.lastIndex) { 
 
     regex.lastIndex++; 
 
    } 
 
     str=str.replace("\{"+m[1]+"\}",dict[m[1]]); 
 
    
 
} 
 
console.log(str);

Смежные вопросы