#javascript #regex
#javascript #регулярное выражение
Вопрос:
Пожалуйста, помогите мне изменить строку:
<img src="hello.jpg" alt="^__^" width="100" height="76" />
Для
<img src="hello.jpg" alt="^__^" width="200" height="150" />
используя регулярное выражение.
Новая информация::
У меня есть товар, и в нем хранится информация о различных переменных для этого продукта
<tr>
<td><img src="_tmp/gesan/benzin/G3000H.jpg" alt="G3000H" width="100" height="76" /></td>
<td>G3000H</td>
<td>2.2 kv</td>
<td>2.75 ka</td>
<td>3,6</td>
<td>1,3</td>
<td>39,7кг</td>
<td>2000 rub</td>
</tr>
при наведении курсора мыши на этот элемент появляется новое всплывающее меню с помощью этого javascript:
$("tr:gt(0)").hover(function(){
$(this).css({'background-color':'#ccc'});
$(this).each(function(){
var itemImage = this.cells[0].innerHTML;itemImage2 = itemImage.replace(/(width=")d ("W height=")d /, '$1200$2150');
var itemName = this.cells[1].innerHTML;
var itemPowerkVa = this.cells[2].innerHTML;
var itemPowerKVt = this.cells[3].innerHTML;
$("body").append("<div id='tip'><div id='tipWrap'>" itemImage2 "<h4>" loadContainerArr[0] " " itemName "</h4><ul><li>" itemPowerkVa "</li><li>" itemPowerKVt "</li></ul></div></div>");
});
tipItem = $("#tip");
tipItem.show(); //Show tooltip
},function() {
tipItem.hide(); //Hide tooltip
$(this).css('background-color','transparent');
tipItem.remove();
})
и я полагаю, что в этой ситуации лучше использовать регулярное выражение, чем создавать новый объект
Комментарии:
1. Почему регулярное выражение? Поскольку вы находитесь на стороне клиента, почему бы просто не использовать jQuery или что-то в этомроде?
2. Пожалуйста, добавьте еще немного информации. Дополнительная информация => лучшие ответы.
3. Феликс Клинг — добавлена новая информация (спасибо за ответ)
Ответ №1:
Если вы действительно хотите использовать регулярное выражение:
str.replace(/(width=")d ("W height=")d /, '$1200$2150');
Обратите внимание, что ваши 200
и 150
являются частью «1 200 долларов США 2 150 долларов США»
Но я приведу 2-е другие комментарии, в которых говорится, что есть лучшие способы сделать это.
Ответ №2:
Почему вы хотите использовать regex здесь?
Просто возьмите этот img
элемент с помощью JS и измените его свойства CSS:
<img id="test" src="hello.jpg" alt="^__^" width="100" height="76" />
document.getElementById("test").style.width = '200px';
document.getElementById("test").style.height = '150px';
Постоянное использование регулярных выражений не является хорошим решением. Это один из таких случаев.
Редактировать:
Если вы используете jQuery
, преобразуйте HTML-строку в объект:
var img = $('<img src="hello.jpg" alt="^__^" width="100" height="76" />');
img.attr('width', 200);
img.attr('height', 150);
Комментарии:
1. Чувак, ты видишь — я получаю строку, а не объект -> вот почему мне нужно регулярное выражение
2. Используете ли вы
jQuery
/mooTools
/etc?3. hsz , чувак, спасибо тебе за твой ответ. Ваш ответ очень хорош, но мне все еще нужно получить регулярное выражение. Я дважды подумал и предположил, что создание нового объекта jQuery из строки медленнее с точки зрения производительности, чем получение регулярного выражения и замена 2 переменных. Я не психопат по поводу производительности, но всегда лучше сделать 1 что-то хорошее, чем несколько плохих.
4. @Vovan: Это может быть неизмеримо медленнее, но это правильный способ сделать это. Что вы вообще делаете со строкой? Вставить это в DOM? К сожалению, вы, похоже, не хотите предоставлять больше информации, поэтому мы не можем помочь вам лучше.
Ответ №3:
Смотрите, там:
шаблон: /(.*)(width="[0-9] ")(.*)(height="76")(.*)/smUi
замена: $1width="200"$3height="150"$5
Вы можете использовать это с PHP:
preg_replace($pattern, $replacement, $data); // where the $data is the text with image
… или на любом другом языке 🙂
Ответ №4:
Мой подход был бы:
Создайте <div id='tip'>
с самого начала (и спрячьте его изначально) и показывайте и скрывайте только его (нет необходимости создавать и уничтожать его каждый раз):
<div id="tip" style="display:none">
<div id="tipWrap">
<img src="" alt="" width="200" height="150" />
<h4></h4>
<ul></ul>
</div>
</div>
Затем вы можете сделать:
$("tr:gt(0)").hover(function(){
$(this).css('background-color', '#ccc');
var $tip = $('#tipWrap'),
$tds = $(this).children(),
$img = $(this).find('img'),
itemName = $tds.eq(1).text(),
itemPowerkVa = $tds.eq(2).text(),
itemPowerKVt = $tds.eq(3).text();
$tip.children('img').attr({
src: $img.attr('src'),
alt: $img.attr('alt')
})
.end().children('h4').text(loadContainerArr[0] " " itemName)
.end().children('ul').html("<li>" itemPowerkVa "</li><li>" itemPowerKVt "</li>")
.end().parent().show();
},function() {
$('#tip').hide(); //Hide tooltip
$(this).css('background-color','transparent');
});
Комментарии:
1. Спасибо! Я попытаюсь воссоздать его, не разрушая