Haga coincidir una cadena con múltiples patrones

¿Cómo puedo unir una cadena contra múltiples patrones usando expresiones regulares en ruby?

Estoy tratando de ver si una cadena está incluida en una matriz de prefijos. Esto no funciona, pero creo que demuestra al menos lo que estoy tratando de hacer.

# example: # prefixes.include?("Mrs. Kirsten Hess") prefixes.include?(name) # should return true / false prefixes = [ /Ms\.?/i, /Miss/i, /Mrs\.?/i, /Mr\.?/i, /Master/i, /Rev\.?/i, /Reverend/i, /Fr\.?/i, /Father/i, /Dr\.?/i, /Doctor/i, /Atty\.?/i, /Attorney/i, /Prof\.?/i, /Professor/i, /Hon\.?/i, /Honorable/i, /Pres\.?/i, /President/i, /Gov\.?/i, /Governor/i, /Coach/i, /Ofc\.?/i, /Officer/i, /Msgr\.?/i, /Monsignor/i, /Sr\.?/i, /Sister\.?/i, /Br\.?/i, /Brother/i, /Supt\.?/i, /Superintendent/i, /Rep\.?/i, /Representative/i, /Sen\.?/i, /Senator/i, /Amb\.?/i, /Ambassador/i, /Treas\.?/i, /Treasurer/i, /Sec\.?/i, /Secretary/i, /Pvt\.?/i, /Private/i, /Cpl\.?/i, /Corporal/i, /Sgt\.?/i, /Sargent/i, /Adm\.?/i, /Administrative/i, /Maj\.?/i, /Major/i, /Capt\.?/i, /Captain/i, /Cmdr\.?/i, /Commander/i, /Lt\.?/i, /Lieutenant/i, /^Lt Col\.?$/i, /^Lieutenant Col$/i, /Col\.?/i, /Colonel/i, /Gen\.?/i, /General/i ] 

Use Regexp.union para combinarlos:

unión (pats_ary) → new_regexp

Devuelve un objeto Regexp que es la unión de los patrones dados, es decir, coincidirá con cualquiera de sus partes.

Entonces esto hará:

 re = Regexp.union(prefixes) 

luego usas re como tu expresión regular:

 if name.match(re) #... 

Si puede usar una sola cadena, podría ser más rápido escribir una expresión regular que contenga los valores posibles.

p.ej

 / (Mr \. | Mrs \. | ...) /. Match (nombre)