Trouver les chaines de caractère
Créer une regexp pour trouver les chaines de caractère entre guillemets doubles "...".
La chaine de caractère devrait supporter lâéchappement, comme les chaines de caractère JavaScript. Par exemple, des guillemets peuvent être insérés comme ceci \" une nouvelle ligne comme \n, et un antislash comme \\.
let str = "Just like \"here\".";
Veuillez noter quâune guillemet échapée \" ne termine pas une chaine de caractère.
Nous devrions donc chercher une guillemet puis la suivante en ignorant celles échapées.
Câest la partie essentielle de la tâche, à part cela, cela devrait être simple.
Exemple de chaine de caractère valides :
.. "test me" ..
.. "Say \"Hello\"!" ... (guillemets échapées à l'intérieur)
.. "\\" .. (double backslash à l'intérieur)
.. "\\ \"" .. (double backslash et guillemets échapées à l'intérieur)
En JavaScript nous devons doubler les slash pour les placer dans la chaine de caractère, comme ceci :
let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';
// the in-memory string
alert(str); // .. "test me" .. "Say \"Hello\"!" .. "\\ \"" ..
La solution : /"(\\.|[^"\\])*"/g.
Etape par etape :
- Dâabord nous recherchons une guillemet ouvrante
" - Ensuite si nous avons un antislash
\\(puisque câest un caractère spécial nous devons le doubler, mais dans les faits câest un unique antislash), alors nâimporte quel caractère peut se trouver à sa suite (un point). - Sinon nous prenons nâimporte quel caractère à part une guillemet (cela signifierait la fin de la chaine de caractère) et un antislash (pour empêcher les antislash solitaires, un antislash est seulement utilisé avec un autre symbole après lui):
[^"\\] - â¦Et on continue jusquâà atteindre la guillemet fermante.
En action :
let regexp = /"(\\.|[^"\\])*"/g;
let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';
alert( str.match(regexp) ); // "test me","Say \"Hello\"!","\\ \""
