JavaScript String Заменить хитрым регулярным выражением - PullRequest
0 голосов
/ 22 марта 2010

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

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.replace.

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

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

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

СПАСИБО

Ответы [ 5 ]

2 голосов
/ 22 марта 2010
  1. Это , как правило, считается плохим делом для анализа HTML с помощью RegExs .

    Почему бы не редактировать DOM из JavaScript?

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

  3. Вы забыли пробел после : (\s*). Ты не хочешь? там, так как он пропустит> 1 пробел или табуляцию

1 голос
/ 22 марта 2010
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 голосов
/ 22 марта 2010

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

Это ответ:

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

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

0 голосов
/ 22 марта 2010

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

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

Редактировать: сбежал qq

0 голосов
/ 22 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...