Регулярные выражения
Помогите с регулярным выражением.
Нужно заменить подстроку 0.5pt на 1px только в подстроке border-width: 0.5pt 0.5pt 0.5pt 0px; Пример приведенный ниже заменяет во всем тексте: '<td width="82" style="border-width: 0.5pt 0.5pt 0.5pt 0px; border-style: solid solid solid none;>Размер 0.5pt не соответствует</td>'.replace(new RegExp("0.5pt",'g'), '1px') Для чего нужна замена: дело в том что border 0.5pt не отображается в Google Chrome, в IE11 - отображается. Может как то можно решить вопрос без замены? |
0.5pt - это 0.6665px. И как ты себе представляешь половину пикселя?
|
То есть вы, разработчики сайта, напортачили в шаблоне, и теперь пытаетесь исправить ошибку через javascript? Гениально просто ))
|
alert( '<td width="82" style="border-width: 0.5pt 0.5pt 0.5pt 0px; border-style: solid solid solid none;>Размер 0.5pt не соответствует</td>' .replace(/:[^;]+/, function(x){return x.replace(/0.5pt/g, "1px")}) ) |
losos100 Спасибо большое, ответ по существу.
Для остальных выдумщиков: скопируйте в буфер обмена данные из MS Exsel и прочитайте из буфера в браузере EI в виде html, тогда вы поймете откуда эти "шаблоны" берутся и 0.5pt интерпритируються в EI11 |
Цитата:
|
danik.js,
То есть настоящие мужЫки пишут 1000 строк вручную вместо одного реплейса? |
Настоящие мужыки устраняют причину, а не последствия :)
|
Мало того, что сама проблема извращённая, так ещё и с самим её решением наговнокодили. :) Зачем парсить весь HTML тэг, когда можно напрямую в стиль достучаться через td.style.borderWidth? И почему регулярка двойная? Одной никак?
|
Ruslan_xDD,
Вот мой вариант для затравки alert( '<td width="82" style="border-width: 0.5pt 0.5pt 0.5pt 0px; border-style: solid solid solid none;>Размер 0.5pt не соответствует</td>' .replace(/(?=[^]*;)0.5pt/g, "1px") ) твой ход |
losos100, не пойдет ни одна из твоих предложенный
|
d.skuratovich,
наша ваша верит, наша глупей. |
losos100, а теперь представь ситуацию, что перед border-width есть еще одно свойство с заданным 0.5pt
В таком случае, твои варианты не будут работать |
losos100, дурацкая у тебя манера, лишь бы быстрее ответ написать, а работает он или нет не важно!
|
<!DOCTYPE HTML> <html> <head> </head> <body> <table> <tbody> <tr> <td id="test" width="82" style="border-width: 0.5pt 0.5pt 0.5pt 0px; border-style: solid solid solid none;">Размер 0.5pt не соответствует</td> </tr> </tbody> </table> <script> var test = document.getElementById('test'); alert( test.style.borderWidth.replace(/0\.5pt/g, '1px') ); </script> </body> </html> |
Цитата:
Пожалуй, начну с того, что: 1. Таблица (table) устарела. Вместо неё либо делать дивами, либо флексбоксами. Хотя я больше чем уверен, что там можно вообще без таблицы обойтись. 2. Атрибут width устарел и приведёт к невалидному коду. 3. Border с шириной 0.666px (0.5pt) не может быть, он будет преобразован в 1px. 4. Получать outerHTML ячейки и парсить стили - изврат, ведь можно на прямую достучаться к стилям через elem.style. 5. Сама реализация писать всё в тэге style - убогость, для этого ведь придумали классы. |
palan, вот есть один вариант. Он будет затрагивать только свойство border-width
'width: 0.5pt; border-width: 0.5pt 1px 0.5pt; height: 0.5pt;'.replace(/(border-width.*?(0.5pt);)/, function (a, b) { return b.replace(/(0.5pt)/gim, '1px'); }); Вернет: "width: 0.5pt; border-width: 1px 1px 1px; height: 0.5pt;" Но его проблема в том, что здесь все равно двойная замена |
Часовой пояс GMT +3, время: 19:37. |