2012-01-25 38 views
0

我有以下內容並試圖在'.'上分割,然後將返回的第一部分拆分爲'-'並返回第一部分的最後一部分。我想返回447將數組鏈接到新的分割函數調用

a="cat-vm-447.json".split('.').split('-') 

另外,我將如何做這個正則表達式?我有這個:

a="cat-vm-447.json".split(/-[\d]+./) 

但這是分裂的價值。我想要返回號碼。

我可以這樣做:

a="cat-vm-447.json".slice(/[\d]+/) 

,這給我回447但真的很想來指定-.圍繞着它。在正則表達式中添加它們會返回它們。

+0

thx所有答案! – timpone

回答

3

第一個問題。 Split會返回一個數組,因此您需要使用Array#[]來獲取此數組的第一個(0)或最後一個(-1)元素。替代方法是Array#firstArray#last方法。

a="cat-vm-447.json".split('.')[0].split('-')[-1] # => "447" 

第二個問題。您可以將您的號碼匹配到組中,然後從響應中得到它(索引爲1)。索引爲0的項目將完全匹配(您的案例中爲「-447。」)。您可以使用String#[]String#match(其中包括)方法來匹配您的正則表達式。

"cat-vm-447.json"[/-(\d+)\./, 1] # => "447" 
# or 
"cat-vm-447.json".match(/-(\d+)\./)[1] # => "447" 
+0

+1您的第二個答案的語法! –

+0

如果文件名保證只有一個數字串,''cat-vm-447.json'[/ \ d + /]'將返回'「447」'而不需要使用捕獲。 –

+0

@theTinMan,是的,但OP *真的想指定 - 和。圍繞它*(來自問題) –

0
a = "cat-vm-447.json" 
b = a.match(/-(\d+)\./) 
p b[0] # => 447 
1

Split返回一個數組,因此您需要指定下一個分割的索引。

a="cat-vm-447.json".split('.').first.split('-').last 

對於正則表達式,您需要在圓括號中包含要捕獲的內容。

/-(\d+)\./ 
0

嘗試類似的東西:

if "cat-vm-447.json" =~ /([\d]+)/ 
    p $1 
else 
    p "No matches" 
end 

在正則表達式中的括號提取結果$ 1變量。

0

當你分割你的字符串第二次,你竟然試圖分裂數組,而不是字符串。

ruby-1.9.3-head :003 > "cat-vm-447.json".split('.') 
# => ["cat-vm-447", "json"] 

在正則表達式的情況下,你可以使用/[-.]/

ruby-1.9.3-head :008 > "cat-vm-447.json".split(/[-.]/) 
# => ["cat", "vm", "447", "json"] 
ruby-1.9.3-head :009 > "cat-vm-447.json".split(/[-.]/)[2] 
# => "447"