Цитата:
Вспоминаем ситуации, когда код создается из строки: eval('..../regexp/g....'); setTimeout('..../regexp/g....', 100); setInterval('..../regexp/g....', 100); new Function('..../regexp/g....'); И конкретный пример: RegExp.trueEscape = function(str) { return (str + '').replace(/([?!^$.(){}:|=[\]+\-\/\\*])/g, '\\$1'); }; RegExp.falseEscape = function(str) { return (str + '').replace(/([?!^$.(){}:|=[\]+\-\\*])/g, '\\$1'); }; var char_ = '/'; var re = eval('/' + RegExp.trueEscape(char_) + '/g'); alert( 'sd/fl/ks/kfk'.replace(re, '@') ); |
Да, Вы правы. Добавил еще и это :)
|
Извините за задержку, были дела.
Kolyaj, спасибо огоромное! То, что надо! e1f, хорошее дополнение, но у меня что-то ошибка все время вылетает. Может, я по незнанию что-то не так делаю? var tshto_najti_new = new RegExp(preg_quote(tshto_najti), 'i'); function preg_quote(str) { if (!str||str.constructor!=String) return ''; return str.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1"); } var rezultat = text_stilja.match(new RegExp('.*(?:^|;)\\s*' + tshto_najti_new + ':\\s*([^;]*)', 'i')); Riim, тут я вообще не понял, что куда вставлять. :) Кстати, заметил такую особенность: если я полученную переменную rezultat в конце функции вставляю в другое поле, напр: document.forms.kakaja_forma.zwet.value=rezultat[1]; то у меня символы в новом поле плохо выделяются мышкой. Подозреваю, что регулярка что-то еще за собой тащит, напр. перевод строки или еще что. Если rezultat задаю напрямую строкой, то все нормально. |
Это как так?
new RegExp('.*(?:^|;)\\s*' + (new RegExp(preg_quote(tshto_najti), 'i')) + ':\\s*([^;]*)', 'i') |
Спасибо! Но все равно не выводит. Скорее всего, блокируют квадратные скобки в rezultat[1]:
<script> function preg_quote(str) { if (!str||str.constructor!=String) return ''; return str.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1"); } var text_stilja='COLOR: #aaaaaa;color: #bbbbbb;background-color: #xxxxxx;color: #cccccc;color: #dddddd;'; var tshto_najti = 'color'; var reg = new RegExp('.*(?:^|;)\\s*' + new RegExp(preg_quote(tshto_najti), 'i') + ':\\s*([^;]*)', 'i'); var rezultat = text_stilja.match(reg); window.alert('Что было: \n\n'+text_stilja+'\n\n\n\n Последнее найденное значение: \n\n'+rezultat[1]); </script> |
Вы меня неверно поняли. Я имел в виду, что у вас что-то странное написано.
Посмотрите, что выводится и какой RegExp у вас, в конечном счете, получается. alert( (new RegExp(preg_quote(tshto_najti), 'i')).toString() ); |
Спасибо!
Получается дословно "/color/,i" Хотя, насколько я понимаю, должно быть "color". Если же переделываю вот так: alert(preg_quote(tshto_najti)); то получается что надо, т.е. "color", и "опасные" символы при этом экранируются как надо. Вставляю в регулярку: var reg = new RegExp('.*(?:^|;)\\s*' + preg_quote(tshto_najti) + ':\\s*([^;]*)', 'i'); var rezultat = text_stilja.match(reg); -- вылетает ошибка на rezultat[1]. При этом, если я в последнем случае вместо + preg_quote(tshto_najti) +вставляю + tshto_najti +, то все Ок. Значит, квадратные скобки в выводе rezultat[1] несовместимы с вставкой вместо переменной функции? |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 17:13. |