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