оптимизация множественной замены и поиска (регулярные выражения)
Здравствуй Олл, всезнающий и всемогущий:)
есть 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 - любой символ или спецсимвол, ..... - одинаковые выражения тоже самое и с началом строки, ну не умею я с ними или делать, когда они уже часть выражения может у кого-то есть мысли как можно оптимизировать вышеописанные решения |
1.
var x = "text|aaaa|text text|cccc| text|none|text |bbbb|text |cccc| text |aaaa|text text|dddd|text" var y = {aaaa:'_w1_', bbbb:'_w2_', cccc:'_w3_', dddd:'_w4_'} alert( x.replace(/\|(\w*?)\|/g, function(a,b){ return y[b]||a } ) ) 2. http://javascript.ru/unsorted/top-10...e-deletecookie |
Aetae
класс, особенно первое) а второе, я вместо большой навороченной функции из ссылки написал решение своего вопроса основанное на ней: matches = /lang=([^;]*)/.exec(document.cookie) cooka = matches[1] благодарю:) |
Часовой пояс GMT +3, время: 22:54. |