2012-04-22 4 views
2

Я создаю генератор карт MTG с JS, и мне было интересно, как я собираюсь заменить мои целые числа в стоимости карты с помощью регулярного выражения? (больше для обучения, чем публикации)Regex заменить целое число, разделенное пробелом

card_cost - это только текстовое значение ввода от пользователя, я хочу иметь возможность разделить целые числа с пробелами. IE: пользователь вводит: «10 1 2». Интс следует заменить, но пробелы должны быть быть сохранен.

бы начать так:

if(card_cost) 
{ 
card_cost=card_cost.replace(/INTEGER/g,"<span class='card_costnum' src='numsymbol.png' ></span>"); 
} 

Попытка здесь, чтобы заменить целые числа с собой удерживаемых внутри диапазона, чтобы отобразить фоновое изображение на число.

Теперь, когда я успел подумать об этом, я предполагаю, что мне нужно получить массив целых чисел, чтобы я мог передать их обратно через промежуток, заменив их не достаточно, чтобы поймать более одного целого числа правильно я предполагаю.

+0

ли это быть регулярным выражением? – Marc

+1

Хорошо, почему вы заменяете номера диапазоном, который включает ту же строку, с которой вы пытаетесь удалить номера? –

+0

Вы хотите заменить цифры изображением этого числа ??? –

ответ

2

В JavaScript replace функция, $& относится к самой строке поиска, так что вы можете написать

someStr = "12 34 foo 5 bar" 
someStr.replace(/\d+/g, "<span whatever>$&</span>") 

возвращается

<span whatever>12</span> <span whatever>34</span> foo <span whatever>5</span> bar 

Для того, чтобы заменить каждую цифру отдельно, просто удалите +:

someStr = "12 34 foo 5 bar" 
someStr.replace(/\d/g, "<span whatever>$&</span>") 

возвращается

<span whatever>1</span><span whatever>2</span> etc 
+0

Это звучит точно так же, как то, что я ищу в вашем первом примере, я собираюсь проверить это быстро. –

+0

Это работало отлично для меня, у меня есть вопрос, есть ли способ регулярного выражения заменить пробелы ничем и не удалять пустые объекты html (например, тег изображения)? –

+0

@Event_Horizon: для удаления пробелов, 'str.replace (/ \ s +/g, '')'. Вторая часть неясна для меня, не могли бы вы задать новый вопрос об этом, с примерами ввода и желаемого вывода? – georg

1

Чтобы удалить все числовые символы:

if(card_cost) 
{ 
    card_cost=card_cost.replace(/\d/g,''); 
} 

Но, как было отмечено в комментариях, я понятия не имел, почему span был в replace(), так что я удалил его и теперь, что выше делает число матчей , и удаляет их, заменяя их пустой строкой нулевого символа.


редакцией следующие разъяснения о намерении вопроса:

if(card_cost) 
{ 
    card_cost = card_cost.replace(/(\d)/g,function(a,b){ 
     return '<span class="card_costnum" src="numsymbol.png">' + a + '</span>'; 
    }); 
} 

JS Fiddle demo.

выше окутает всех совпавших номера в span, но он будет соответствовать всем числовым символам.

if(card_cost) 
{ 
    card_cost=card_cost.replace(/\b(\d+)\b/g,function(a,b){ 
     return '<span class="card_costnum" src="numsymbol.png">' + a + '</span>'; 
    }); 
} 

JS Fiddle demo.

Эта версия будет соответствовать числовым символам с ограничениями по слову (из одного или нескольких) и обернуть эти соответствия в span.

Ссылки:

+0

Пробел был там, потому что я использую класс, чтобы добавить фон за целыми числами, я собираюсь заменить их самими, удерживаемыми внутри пролета. –

+0

Если бы вы спросили об этом в вопросе ... * переработать * О, и в каком формате вы хотите, чтобы 'span' принимал, если число равно' 9'? –

+0

No 0 padding или что-то интересное, только целые числа. –

0
if(card_cost) 
{ 
    card_cost=card_cost.replace(/\d+/g,"<span class='card_costnum' src='numsymbol.png' ></span>"); 
} 
+0

Что помещает знак «плюс» в изменении регулярных выражений? (У меня не было много опыта регулярных выражений) –

+0

Символ '+' означает совпадение с предыдущим символом один или несколько раз. Сам '\ d' просто соответствует одной цифре. '\ d +' соответствует одной или нескольким цифрам. – Jack

0

Давайте предположим, что вы будете с помощью JQuery:

var theNumbers = card_cost.split(" "); 
for (var i=0; i < theNumbers.length; i++) { 
    $("#target_div").append("<span class='card_costnum'>"+theNumbers[i]+"</span>"); 
} 

Я думаю, что достигает SOMET hing довольно похоже на то, что вы запрашиваете, но я не использую регулярное выражение.

+0

... почему мы должны предположить, что он использует jQuery? И похоже, что вы заменяете каждый пробельный символ пробелом? Независимо от того, что это письмо или номер. Или пунктуация. –

+0

ВАМ не нужно отвечать. Это условие, к которому я обращаюсь. Он может легко добавить jQuery, если он еще не был, но я не думаю, что это необоснованно. Если вы предпочитаете, я могу изменить это, чтобы сказать «добавить jQuery, затем ...» – Marc

+0

У меня нет проблемы с выражением предположения, это касается меня самого предположения. Должно ли считаться действительным для людей, чтобы начать отвечать на вопросы JavaScript с помощью [tag: glow]? Как насчет [tag: mootools] ..? –

0
if (card_cost) { 
    card_cost = card_cost.replace(/(\d+)/g, '<span class="card_costnum_$1">$1</span>'); 
} 

плюс CSS, как:

.card_costnum_42 { 
    background-image: url('card_costnum_42.png'); 
} 
Смежные вопросы