Объединение массива в новый вызов функции split - PullRequest
0 голосов
/ 25 января 2012

У меня есть следующее, и я пытаюсь разделить на '.', а затем разделить возвращенную первую часть на '-' и вернуть последнюю из первой части.Я хочу вернуть 447.

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

Кроме того, как бы я сделал это как регулярное выражение?У меня есть это:

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

но это делится на значение.Я хочу вернуть номер.

Я могу сделать это:

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

, и это возвращает мне 447, но очень хотелось бы указать, что - и . окружают его.Добавление тех в регулярном выражении возвращает их.

Ответы [ 5 ]

3 голосов
/ 25 января 2012

Первый вопрос. Split возвращает массив, поэтому вам нужно использовать Array # [] , чтобы получить первые (0) или последние (-1) элементы этого массива. Альтернативы - Массив # первый и Массив # последний методы.

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"
1 голос
/ 25 января 2012

Split возвращает массив, поэтому вам нужно указать индекс для следующего разбиения.

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

Для регулярного выражения вам нужно обернуть то, что вы хотите захватить вкруглые скобки.

/-(\d+)\./
0 голосов
/ 25 января 2012

Когда вы разделяете строку во второй раз, вы фактически пытаетесь разделить массив вместо строки.

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" 
0 голосов
/ 25 января 2012

Попробуйте что-то вроде этого:

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

Скобки в регулярном выражении извлекают результат в переменной $ 1.

0 голосов
/ 25 января 2012
a = "cat-vm-447.json"
b = a.match(/-(\d+)\./)
p b[0] # => 447 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...