Convertir une chaîne en expression régulière ruby

Je dois convertir une chaîne comme “/ [\ w \ s] + /” en expression régulière.

"/[\w\s]+/" => /[\w\s]+/ 

J’ai essayé d’utiliser différentes méthodes Regexp comme:

Regexp.new("/[\w\s]+/") => /\/[w ]+\// , de même Regexp.comstack et Regexp.escape . Mais aucun ne revient comme je l’espérais.

De plus, j’ai essayé de supprimer les barres obliques inverses:

Regexp.new("[\w\s]+") => /[w ]+/ Mais pas de chance.

Ensuite, j’ai essayé de le faire simplement:

 str = "[\w\s]+" => "[w ]+" 

Il s’échappe Maintenant, comment la chaîne peut-elle restr telle quelle et convertir en object regexp?

On dirait que la chaîne initiale doit être entre guillemets simples (reportez – vous à cette page )

 >> str = '[\w\s]+' => "[\\w\\s]+" >> Regexp.new str => /[\w\s]+/ 

Pour être clair

  /#{Regexp.quote(your_ssortingng_variable)}/ 

travaille aussi

edit: enveloppé votre_variable_ssortingng dans Regexp.quote, pour plus de précision.

Cette méthode échappe en toute sécurité à tous les caractères ayant une signification particulière:

 /#{Regexp.quote(your_ssortingng)}/ 

Par exemple . sera échappé, car il est autrement interprété comme «n’importe quel personnage».

N’oubliez pas d’utiliser une chaîne de guillemets simples à moins que vous ne souhaitiez que l’interpolation de chaîne soit active, où la barre oblique inverse a une signification particulière.

En utilisant la notation%:

 %r{\w+}m => /\w+/m 

ou

 regex_ssortingng = '\W+' %r[#{regex_ssortingng}] 

De l’ aide :

% r [] Expression interpolée (les indicateurs peuvent apparaître après le délimiteur de fermeture)

Le bijou to_regexp peut faire le travail.

 "/[\w\s]+/".to_regexp => /[\w\s]+/ 

Vous pouvez également utiliser le modificateur:

 '/foo/i'.to_regexp => /foo/i 

Enfin, vous pouvez être plus paresseux en utilisant: detect

 '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/}