javascript
  • regex
  • string
  • 2010-03-22 3 views 0 likes 
    0

    Я пытаюсь выяснить, что регулярное выражение, которое я должен был бы изменить эту строкуJavaScript Строка Заменить хитрой регулярное выражение

    html = '<img style="width: 311px; height: 376px;" alt="test" src="/img/1268749322.jpg" />'; 
    

    к этому

    html = '<img width="311" height="376" alt="test" src="/img/1268749322.jpg" />'; 
    

    с помощью JavaScript. заменить.

    Это мой старт:

    html = html.replace(/ style="width:\?([0-9])px*"/g, "width=\"$1\""); 
    

    Может кто-нибудь мне помочь?

    БЛАГОДАРЯ

    +1

    Попробуйте сделать это над DOM, если это возможно. Регулярные выражения не подходят для обработки HTML. – Gumbo

    +0

    Вы пытаетесь манипулировать определенным тегом? или вы пытаетесь манипулировать всеми тегами одного и того же типа? – GnrlBzik

    ответ

    1
    html = '<img style="width: 311px; height: 376px;" alt="test" src="/img/1268749322.jpg" />'; 
    var d = document.createElement("div"); 
    d.innerHTML = html; 
    var img = d.firstChild; 
    var width = parseInt(img.style.width, 10); 
    var height = parseInt(img.style.height, 10); 
    img.setAttribute("width", width); 
    img.setAttribute("height", height); 
    img.removeAttribute("style"); 
    
    alert(d.innerHTML); 
    

    Конечно, все становится немного легче, если вы не начинаете со строкой ;-)

    +0

    Спасибо. Я проверю ваш код! – Juri

    +0

    это HTML-код, предоставленный WYSIWYG-редактором – Juri

    0

    Гамбо правильно, вы должны использовать DOM.

    Но вашему регулярному выражению: Что такое \? (знак вопроса)? Я бы вставил \s* (любое количество пробелов) в этом положении.

    2
    1. Это generally considered a Bad Thing to do HTML parsing with RegExs.

      Почему бы не изменить DOM из JavaScript?

    2. Я не эксперт по CSS, но не использует стиль лучше, чем атрибуты width/height?

    3. Вы забыли пробел после : (\s*). Вы не хотите? там, так как он пропустит> 1 пробел или вкладку

    +0

    спасибо за ссылку, я ее прочитаю! – Juri

    +0

    @Juri - на всякий случай это не очевидно, ссылка на блог одного из двух основателей StackOverflow. – DVK

    0

    я могу сделать его более сложным, если вы хотите, дайте мне знать, как это работает:

    html = html.replace(/style=".*?width:\s?(\d+).*?height:\s?(\d+).*?"/g, "width=\"$1\" height=\"$2\""); 
    

    Edit: спасся QQ

    +0

    вот оно, спасибо! html = html.replace (/ style = ". *? Width: \ s? (\ D +). *? Height: \ s? (\ D +). *?"/G, "width = \" $ 1 \ " высота = \ "$ 2 \" "); – Juri

    +0

    Спасибо, Juri, поляну вам понравилось! – 2010-03-22 17:57:40

    0

    Да, обычно я бы делал это с DOM, но в этом специальном случае мне нужно разобрать HTML-код, указанный в WYSIWYG-редакторе, whish filters style-attributes. В общем, это хорошо, но для фотографий я хотел бы сохранить заданные размеры с помощью этого html.replace-Hack.

    Это ответ:

    html = html.replace(/ style=".*?width:\s?(\d+).*?height:\s?(\d+).*?"/g, " width=\"$1\" height=\"$2\""); 
    

    Спасибо за вашу помощь :-)

    Смежные вопросы