Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Нужна помощь с регулярным выражением


Автор: t77 26.4.2010, 18:11
Доброе время суток.
Имеется переменная-outputHtmlStr, содержащая html код.
Задача заключается в том, чтобы пробежаться по всему этому html коду, найти тег FONT и заменить значение атрибута SIZE на 7pt.
Тоесть, если на входе мы имеем:
Код

<font size="21pt">
        Text1
    </font>
    <font size="21px">
        Text2
    </font>
    <font size="21%">
        Text3
    </font>
    <font size=21>
        Text3
    </font>

То на выходе должны получить:
Код

<font size="7pt">
        Text1
    </font>
    <font size="7pt">
        Text2
    </font>
    <font size="7pt">
        Text3
    </font>
    <font size="7pt">
        Text3
    </font>

У меня получилась следующая маска:
Код

outputHtmlStr.replace(/(\<font[^\>]+size=)(\s*\'?\"?[0-9\s*a-z%]+\'?\"?\s*)([^\>]*\>)/ig, "$1\'7pt\' $3");

Но она не работает!
Помогите, пожалуйста починить ее.
Принимается более красивый вариант решения.
Заранее благодарю.

Автор: Amphiluke 26.4.2010, 19:32
Вот вам альтернатива.
Код

    str = 
        '<font size="21pt">\n' +
        '    Text1\n' +
        '</font>\n' +
        '<font size="21px">\n' +
        '    Text2\n' +
        '</font>\n' +
        '<font size="21%">\n' +
        '    Text3\n' +
        '</font>\n' +
        '<font size=21>\n' +
        '    Text3\n' +
        '</font>';
    
    function changeSizeTo7() {
        var re = /(<font\s+size\s*=\s*["']?)\d+[^"'>]*(["'>]{1}[^<]*<\/font>)/gi;
        alert(str.replace(re, "$1\u0037pt$2"));
    }
    changeSizeTo7();


Ну как, красивее?  smile 

Автор: t77 26.4.2010, 20:33
Amphiluke, спасибо вам за ответ.
Честно говоря, красиво !
Судя по всему, вы хорошо разбираетесь в регексах...
Помогите мне советом, как мне овладеть ими. Тоесть с чего начинать, что читать, как их проверять ??

Автор: Amphiluke 26.4.2010, 21:54
Эээ... smile

Ну, значит, надо всё заранее распланировать! Где-то за неделю до начала кампании по освоению регулярных выражений нужно разобраться со всеми делами, закончить все незаконченное, запастись продуктами, чтобы потом не отрываться от занятий... Также предупредить всех друзей и знакомых, что вас некоторое время нельзя будет беспокоить, потому что вы будете заняты очень ответственной работой! В заветный день нужно встать рано, принять скорую трапезу, после чего торжественно взгромоздиться в кресло и взять в руки книгу из заранее подготовленной подборки. Например, будем считать, что это Дэвид Флэнаган «JavaScript. Подробное руководство». Внимательно перечитав (можно несколько раз) главу, посвященную регулярным выражениям, сесть за компьютер и перепроверить все примеры кода, которыми автор проиллюстрировал главу. Подумать. Если что-то осталось неясным, вернуться в кресло и прочитать непонятное место еще раз внимательно... Сесть опять за компьютер. Открыть в интернете какой-нибудь ресурс с документацией по JavaScript. Будем считать, что это Core JavaScript 1.5 Guide и в нем глава https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide#Regular_Expressions. Просмотреть все страницы и соотнести с прочитанным в книжке. Подумать. При необходимости повторить любые действия. Принять скорую трапезу. Посидеть в умном кресле, ощущая как новая информация наполняет жаждущий знаний мозг. Сесть за комп. Попробовать поработать с регулярными выражениями, выдумывая на ходу требования к шаблонам... Следующие несколько дней набивать руку, не отвлекаясь ни на что (благо друзья оповещены заранее о вашем важном занятии).
Считать свое мастерство совершенным, когда удастся выдернуть из «Войны и мира» все предлоги длиной от одного до пяти символов в окружении двух существительных, содержащих букву «а» в позиции 3-5 и какую-нибудь глухую согласную, следующую от нее на расстоянии 0-5 и входящую в суффикс этого слова...



А вообще я не знаю, как для вас лучше осваивать RegExp'ы. smile

Автор: t77 26.4.2010, 22:36
 smile 
Amphiluke, попробую почитать Флэнагана , может из этого что то получится. smile 
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)