Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 15.05.2009, 18:33
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от e1f
А вот насчет "/"... Можете привести пример?
Так и знал, что на счет этого символа вы мне на слово не поверите.
Вспоминаем ситуации, когда код создается из строки:
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, '@')
);
Ответить с цитированием
  #12 (permalink)  
Старый 15.05.2009, 19:55
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Да, Вы правы. Добавил еще и это
Ответить с цитированием
  #13 (permalink)  
Старый 16.05.2009, 17:52
Аспирант
Отправить личное сообщение для Andrej_2 Посмотреть профиль Найти все сообщения от Andrej_2
 
Регистрация: 14.05.2009
Сообщений: 30

Извините за задержку, были дела.

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 задаю напрямую строкой, то все нормально.
Ответить с цитированием
  #14 (permalink)  
Старый 16.05.2009, 19:01
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Это как так?
new RegExp('.*(?:^|;)\\s*' + (new RegExp(preg_quote(tshto_najti), 'i')) + ':\\s*([^;]*)', 'i')
Ответить с цитированием
  #15 (permalink)  
Старый 16.05.2009, 20:53
Аспирант
Отправить личное сообщение для Andrej_2 Посмотреть профиль Найти все сообщения от Andrej_2
 
Регистрация: 14.05.2009
Сообщений: 30

Спасибо! Но все равно не выводит. Скорее всего, блокируют квадратные скобки в 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>
Ответить с цитированием
  #16 (permalink)  
Старый 16.05.2009, 21:48
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Вы меня неверно поняли. Я имел в виду, что у вас что-то странное написано.
Посмотрите, что выводится и какой RegExp у вас, в конечном счете, получается.

alert(
(new RegExp(preg_quote(tshto_najti), 'i')).toString()
);
Ответить с цитированием
  #17 (permalink)  
Старый 17.05.2009, 12:22
Аспирант
Отправить личное сообщение для Andrej_2 Посмотреть профиль Найти все сообщения от Andrej_2
 
Регистрация: 14.05.2009
Сообщений: 30

Спасибо!

Получается дословно "/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] несовместимы с вставкой вместо переменной функции?

Последний раз редактировалось Andrej_2, 17.05.2009 в 12:26. Причина: дописал немного
Ответить с цитированием
  #18 (permalink)  
Старый 17.05.2009, 15:15
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
вылетает ошибка на rezultat[1]
покажи полный текст, у меня ошибка не возникает
Цитата:
Значит, квадратные скобки в выводе rezultat[1] несовместимы с вставкой вместо переменной функции?
нет
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
Почему не работает скрипт, подскажите aviaks Ваши сайты и скрипты 2 05.05.2009 14:38
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 13:16
Скрипт меню-гармошки работает выборочно Extern Элементы интерфейса 2 23.02.2009 15:32
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44