2012-04-22 35 views
2

我正在創建一個MTG卡發電機與JS,我想知道如何去替換我使用正則表達式在卡成本整數? (更多學習比發佈)正則表達式來替換整數分隔的空間

card_cost只是一個用戶輸入的文本值,我希望能夠用空格分隔整數IE:用戶輸入:「10 1 2」應該替換Ints,但空間應該被保存。

應該像這樣開頭:

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

這裏的嘗試,以取代自己的跨度內舉行,以顯示每數一個背景圖像的整數。

現在我已經有時間思考這個問題了,我假設我需要獲取一個整數數組,以便我可以在一個範圍內通過它們,替換不會足以捕獲多個整數正確的我假設。

+0

是否必須是正則表達式? – Marc 2012-04-22 07:58:04

+1

好的,你爲什麼要用包含你想從中刪除數字的相同字符串的跨度替換數字? – 2012-04-22 07:58:24

+0

你的意思是你想用這個數字的圖像替換數字嗎? – 2012-04-22 07:59:25

回答

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

這聽起來和我在第一個例子中所尋找的完全一樣,我要快速測試它。 – 2012-04-22 15:41:57

+0

這對我很好,但我有一個問題,有沒有辦法正則表達式替換空格什麼也不刪除空的html對象(如圖像標籤)? – 2012-04-22 16:19:46

+0

@Event_Horizo​​n:刪除空格,'str.replace(/ \ s +/g,'')'。第二部分對我來說還不清楚,你能否提出一個關於這個問題的新問題,例如輸入和期望輸出? – georg 2012-04-22 16:37:13

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 s中。

參考文獻:

+0

跨度是在那裏,因爲我正在使用該類在整數後面添加背景,我將用跨度內的自己替換它們。 – 2012-04-22 08:04:11

+0

如果只是在問題中提問...... *重做*哦,例如,如果數字爲「9」,您希望採用什麼格式? – 2012-04-22 08:05:37

+0

沒有0填充或任何幻想,只是整數本身。 – 2012-04-22 08:09:33

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

將正號加在正則表達式中會發生什麼變化? (我沒有太多的正則表達式經驗) – 2012-04-22 08:10:44

+0

'+'表示匹配前面的字符一次或多次。 '\ d'本身只是匹配一個數字。 '\ d +'匹配一個或多個數字。 – Jack 2012-04-22 08:23:03

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非常類似於你要求的,但我沒有使用正則表達式。

+0

...爲什麼我們應該假設他使用jQuery?它看起來就像是用跨度替換每個空格分隔的字符?不管它是一封信還是一個號碼。或標點符號。 – 2012-04-22 08:21:59

+0

你不必在你的答案。這是我正在申請我的答案的一個條件。如果他還沒有,他可以很容易地添加jQuery,但我認爲這不合理。如果你願意,我可以改變,說「添加jQuery,然後...」 – Marc 2012-04-22 08:25:27

+0

我沒有問題的假設的表達,這是假設本身,關心我。對於人們開始使用[tag:glow]解決方案開始回答JavaScript問題是否應該被認爲是有效的? [tag:mootools] ..怎麼樣? – 2012-04-22 08:32:16

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'); 
}