Здравствуй Олл, всезнающий и всемогущий
есть 2 момента в коде, которые хотелось бы оптимизировать, прошу помочь
номер раз: множественная замена в строке элементами массива
дано
xx = "text|aaaa|text text|cccc| texttext |bbbb|text |cccc| text |aaaa|text text|dddd|text"
yy = {aaaa:'_w1_', bbbb:'_w2_', cccc:'_w3_', dddd:'_w4_'}
надо все встречающиеся в строке
xx конструкции |слово| заменить на значения массива
yy с одноимённым ключом
сначала я по неопытности делал так:
r1 = xx.replace(/\|aaaa\|/g, yy.aaaa);
r2 = r1.replace(/\|bbbb\|/g, yy.bbbb);
r3 = r2.replace(/\|cccc\|/g, yy.cccc);
zz = r3.replace(/\|dddd\|/g, yy.dddd);
разумеется всё работает, но... сами понимаете)
потом я вспомнил как в PHP можно заменять элементы одного массива соответствующими элементами другого,
жаль в JS такого нету. почитал про
Спецсимволы в строке замены и попробовал так:
zz = xx.replace(/\|(\w*)\|/g, yy['$1']);
но ничего не вышло. вставляет undefined вместо того что надо.
кстати кто может объяснить посему?
потом почитал про
Замену через функцию и сделал так:
function replacer(str, p) { return str.replace(/\|\w*\|/, '') + yy[p] }
zz = xx.replace(/\|(\w*)\|/g, replacer)
потом подумал получше и сделал так:
function replacer(s, p1, p2) { return p1+yy[p2] }
zz = xx.replace(/([^\|]*)\|(\w*)\|/g, replacer)
оба варианта работают, но есть стойкое ощущение, что что-то упустил и можно сделать проще и лучше
для удобства проверки:
document.write(xx+'<br>'+zz)
номер два: соответствие в поиске для начала/конца строки или другого спецсимвола
допустим надо в cookies найти значение какой-нибудь куки.
варианты строки cookies могут быть такими:
- aaa=111
- aaa=111; bbb=222
- bbb=222; aaa=111
- bbb=222; aaa=111; ccc=333
то есть наша кука может быть одна, в начале, в конце и в середине строки
чтобы узнать её значение пишу регулярку:
cooka = /aaa=[^;]*;|aaa=[^;]*$/.exec(document.cookie);
zz = cooka[0].replace(/aaa=|;/g, '');
меня тут смущает это: /.....x|.....$/ где
x - любой символ или спецсимвол,
..... - одинаковые выражения
тоже самое и с началом строки, ну не умею я с ними
или делать, когда они уже часть выражения
может у кого-то есть мысли как можно оптимизировать вышеописанные решения