An alternative of using a multiple assignment for a Regex are named groups. Especially when your Regex becomes more complicates it is easier to understand and to process.
Note:
.match
will return nil
..match
can be transformed to a Hash
with named_captures
. This allows you to use methods like slice
or fetch
on the result.PRODUCT_PATTERN = /\A(.+) S\/N:(\w+)\z/
product = "Bosch S/N:WS200LN12"
manufacturer, serial_number = product.match(PRODUCT_PATTERN)&.captures
# or
manufacturer = product[PRODUCT_PATTERN, 1]
serial_number = product[PRODUCT_PATTERN, 2]
PRODUCT_PATTERN = /\A(?<manufacturer>.+) S\/N:(?<serial_number>\w+)\z/
product = "Bosch S/N:WS200LN12"
match = product.match(PRODUCT_PATTERN) || {}
manufacturer = match[:manufacturer]
serial_number = match[:serial_number]
# or
manufacturer = product[PRODUCT_PATTERN, :manufacturer]
serial_number = product[PRODUCT_PATTERN, :serial_number]
PRODUCT_PATTERN = /\A(?<manufacturer>.+) S\/N:(?<serial_number>\w+)\z/
product = "Bosch S/N:WS200LN12"
match = product.match(PRODUCT_PATTERN)
manufacturer = match&.named_captures&.fetch('manufacturer')
serial_number = match&.named_captures&.fetch('serial_number')