regulares - Convierte una cadena en expresión regular ruby
manejo de cadenas en ruby (5)
Necesito convertir cadenas como "/ [/ w / s] + /" a la expresión regular.
"/[/w/s]+/" => /[/w/s]+/
Traté de usar diferentes métodos Regexp
como:
Regexp.new("/[/w/s]+/") => ///[w ]+///
, de manera similar Regexp.compile
y Regexp.escape
. Pero ninguno de ellos regresa como esperaba.
Además, traté de eliminar las barras invertidas:
Regexp.new("[/w/s]+") => /[w ]+/
Pero no tengo suerte.
Entonces traté de hacerlo simple:
str = "[/w/s]+"
=> "[w ]+"
Se escapa. Ahora, ¿cómo podría la cadena permanecer como está y convertirla en un objeto regexp?
Este método salvará con seguridad a todos los personajes con un significado especial:
/#{Regexp.quote(your_string)}/
Por ejemplo .
se escapará, ya que de lo contrario se interpreta como ''cualquier personaje''.
Recuerde utilizar una cadena de una sola cita a menos que desee que la interpolación de cadena regular se active, donde la barra invertida tiene un significado especial.
La gema to_regexp puede hacer el trabajo.
"/[/w/s]+/".to_regexp => /[/w/s]+/
También puedes usar el modificador:
''/foo/i''.to_regexp => /foo/i
Finalmente, puede ser más perezoso usando: detectar
''foo''.to_regexp(detect: true) #=> /foo/
''foo/b''.to_regexp(detect: true) #=> %r{foo//b}
''/foo/b/''.to_regexp(detect: true) #=> %r{foo/b}
''foo/b/''.to_regexp(detect: true) #=> %r{foo//b/}
Para ser claro
/#{Regexp.quote(your_string_variable)}/
está trabajando también
edit: wrap your_string_variable en Regexp.quote, para mayor exactitud.
Parece que aquí necesita que la cadena inicial esté entre comillas simples (consulte esta página )
>> str = ''[/w/s]+''
=> "[//w//s]+"
>> Regexp.new str
=> /[/w/s]+/
Usando la notación%
%r{/w+}m => //w+/m
o
regex_string = ''/W+''
%r[#{regex_string}]
De help :
% r [] Regexp interpolado (los indicadores pueden aparecer después del delimitador de cierre)