Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения (https://javascript.ru/forum/misc/53159-regulyarnye-vyrazheniya.html)

palan 23.01.2015 11:49

Регулярные выражения
 
Помогите с регулярным выражением.
Нужно заменить подстроку 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 - отображается. Может как то можно решить вопрос без замены?

ruslan_mart 23.01.2015 11:58

0.5pt - это 0.6665px. И как ты себе представляешь половину пикселя?

danik.js 23.01.2015 12:05

То есть вы, разработчики сайта, напортачили в шаблоне, и теперь пытаетесь исправить ошибку через javascript? Гениально просто ))

losos100 23.01.2015 13:15

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")})
)

palan 23.01.2015 14:03

losos100 Спасибо большое, ответ по существу.

Для остальных выдумщиков: скопируйте в буфер обмена данные из MS Exsel и прочитайте из буфера в браузере EI в виде html, тогда вы поймете откуда эти "шаблоны" берутся и 0.5pt интерпритируються в EI11

danik.js 23.01.2015 14:09

Цитата:

Сообщение от palan
скопируйте в буфер обмена данные из MS Exsel

Очищаешь код от стилей (есть такая кнопка в редакторе, или пишешь сам), пишешь нужные в css - все прекрасно. Но для тебя это будет слишком сложно, так что довольствуйся предложенным костылем ))

losos100 23.01.2015 14:12

danik.js,
То есть настоящие мужЫки пишут 1000 строк вручную вместо одного реплейса?

danik.js 23.01.2015 14:40

Настоящие мужыки устраняют причину, а не последствия :)

ruslan_mart 23.01.2015 15:01

Мало того, что сама проблема извращённая, так ещё и с самим её решением наговнокодили. :) Зачем парсить весь HTML тэг, когда можно напрямую в стиль достучаться через td.style.borderWidth? И почему регулярка двойная? Одной никак?

losos100 23.01.2015 15:17

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")
)

твой ход


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