Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Стырил регулярку - не пашет (https://javascript.ru/forum/misc/50828-styril-regulyarku-ne-pashet.html)

kostyanet 13.10.2014 06:24

Стырил регулярку - не пашет
 
Отсюда http://stackoverflow.com/questions/1...rs-while-exclu

и применил
var url = 'url("http://example.com/captcha/captcha.jpeg?0.999999999")';
url.replace(/(?<=\?)(.*?)(?=\")/,Math.random());

/*
Exception: invalid regexp group
@Scratchpad/1:11
*/


подскажите, пжслта, в чем тут проблема с шаблоном?

Задача возникла когда я заменил img на style.backgroundImage сочтя что капчу и фоном в инпуте будет видно. В отличии от img - фон заключен в дебильное слово url, в котором еще свои собственные кавычки, в общем в инлайн-онклике не так просто конкатенировать, поэтому пошел искать вариант замены на регах.

Задача такая - заменить все после ? до " на новое.

Спасибо.

danik.js 13.10.2014 08:05

Цитата:

Сообщение от kostyanet
капчу и фоном в инпуте будет видно

И как это выглядит?

kostyanet 13.10.2014 08:48

Вложений: 1
Вот так (вложение).

Рега запахала без символа < перед = (лукбихайнд какой-то). Добавляю ? вручную. Дайте регу без лишних скаляров. В этот он-клик что-то такое вписывать жуткий гемор. В частности \" пришлось заменить на &quot; хтмля же ля.

Вот такой получился атттттрибут
->label('Введите код с картинки&nbsp;<span id="reload_captcha" style="color:#aaaab4;cursor:pointer;" 
			onclick="{var el=document.getElementById(\'captcha\');
			el.style.backgroundImage=el.style.backgroundImage.replace(/(?=\?)(.*?)(?=&quot)/,\'?\'+Math.random());
			el.value=null; el.focus();}">(обновить)</span>')

kostyanet 13.10.2014 08:54

Вообще эта капча просто от100^%$ла! Кусок гавна вокруг которого столько блин возни. Надо написать класс генерации, надо написать модель-рендер, надо все профтыкать, обновлять, надо проверять запрос и сессию, ебалайтен!

Может сейчас какие-то гуманные технологии появились?

danik.js 13.10.2014 08:54

Да ну фигня по-моему. Оно того не стоит. Лучше картинкой.

kostyanet 13.10.2014 09:01

Картинка не вписывается в классовый шаблон. Шаблон делает ровно 1 вложение - в контейнер пихает подпись и инпут (или любой тег).

Без шаблона капча вставляется из view через include по факту присутствия в сессии ключа captcha, и тогда проверка выпадает из общей валидации, капчу надо отдельно тогда проверять. Я подумал фоном будет видно, зато все в шаблоне и проверка системная.

Ну что с этим лукбихайндом неправильно?

danik.js 13.10.2014 09:10

Цитата:

Сообщение от kostyanet
Ну что с этим лукбихайндом неправильно?

А его вообще нет в js регулярках.

kostyanet 13.10.2014 09:11

Сахар в том что вся полевая тряхомудия рендерится одной строкой

<?php echo $this->fields;?>


в случае необходимости можно рендерить по-отдельности

<?php echo $this->fields->some_name;?>

или по индексу

<?php echo $this->fields[4];?>

пока что такой необходимости не было.

Инстансь $fields сделана из класса типа ArrayObject, но самопального, со своими всеми фичами, геттерами, сеттерами и прочей магией. В эту инстансь профтыкаются объекты класса FormField у которого своя магия, поэтому <?php echo $this->fields; ?> означает вызов __toString() в коллекции, а там форичем всю дату __toString() и готово.

kostyanet 13.10.2014 09:13

Цитата:

Сообщение от danik.js
А его вообще нет в js регулярках.

Точно, там же сишный контекст. А я думал езыг регулярок универсальный.

Ну ладно, а как на js заменить текст между ? и "

danik.js 13.10.2014 09:33

Да хотя бы так:
url.replace(/\?(.*?)(?=\")/, '?' + Math.random());


Часовой пояс GMT +3, время: 13:37.