Je voudrais créer deux regex qui vérifient ces deux types de chaînes: donc: p> et le même mais avec environ Exemples: p>
HSL (...) code> p> const regexSimpleFormat = /(hsl\() (([0 - 9] | [1 - 9][0 - 9] | [1 - 2][0 - 5][0 - 9]) °) (, [] ?)(([0 - 9] | [1 - 9][0 - 9] | 100) %)(, [] ?)(([0 - 9] | [1 - 9][0 - 9] | 100) %)(\))/gi
console.log(regexSimpleFormat.test('hsl(22°, 79%, 52%)')) // should be true
console.log(regexSimpleFormat.test('hsl(02°, 79%, 52%)')) // should be false
3 Réponses :
Même si les espaces pourraient rendre votre regex un peu plus lisible, ils le font échouer.
De plus, En réalité, je vous recommanderais davantage de saisir les chiffres, puis de vérifier la plage via JS. Il est plus lisible et plus facile à comprendre et à déboguer. P> p> HSL code> avec les crochets doit être facultatif. J'ai également changé le type que vous recherchez des espaces et définis, que la dernière partie devrait se produire deux fois pour éviter les répétables dans la regex. ^ (hsl \ ()? \ S * (([0-9] | ([1-9] [0-9]) | ([1-2] [0-5] [0-9]))  °) ((, \ s *) (([0-9] | [ 1-9] [0-9] | (100))%)) {2} \)? Code> => https://regex101.com/r/TYR2W2/2 P> 259°, 79%, 52%)
hsl(259°, 79%, 52%"
Voir le commentaire de @ Cyborg86PL sur une autre question.
une regex possible pour cela:
p> ^ (hsl \ ()? (2 [0-5] [0-9] | 1 [0-9] {2} | [1-9] [0-9] | [0-9])  °, \ S? (100 | [1-9] [0-9] | [0-9])%, \ S? (100 | [1-9 ] [0-9] | [0-9])% \)? $ Code> p> const regexSimpleFormat = /^(hsl\()?(2[0-5][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])°,\s?(100|[1-9][0-9]|[0-9])%,\s?(100|[1-9][0-9]|[0-9])%\)?$/gi
console.log(regexSimpleFormat.test('hsl(22°, 79%, 52%)')) // should be true
console.log(regexSimpleFormat.test('hsl(02°, 79%, 52%)')) // should be false
Pour rendre HSL () en option, vous devez utiliser logique ou pour les deux cas. Sinon 259 °, 79%, 52%) code> ou HSL (259 °, 79%, 52%, 52% " code> Les exemples correspondront également.
Vous pouvez utiliser l'expression régulière suivante.
(?<!\() negative lookbehind asserts match is not preceded by '('
\b match a word boundary
(?:\d|[1-9]\d|[1-2]\d{2}|3[0-5]\d|360)
match an integer 0-360 converted to a string
° match character
(?: begin a non-capture group
, ? match a comma optionally followed by a space
(?:[0-9]|[1-9]\d|100)
match an integer 0-100 converted to a string
% match character
) end non-capture group
{2} execute non-capture group twice
(?!\)) negative lookahead asserts match is not followed by ')'
| or
\bhsl\( match 'hsl(' preceded by a word boundary
(?:\d|[1-9]\d|[1-2]\d{2}|3[0-5]\d|360)°(?:, ?(?:[0-9]|[1-9]\d|100)%){2}
as above
\) match ')'
Votre dernier exemple non valide
HSL (259 °, 100%, 100%) code> contredit le deuxième exemple que vous avez donné pour les chaînesHSL (322 °, 79%, 52%, 52%) code>.Normalement, je voudrais juste grapper les chiffres, convertir en chiffres, puis vérifier s'ils sont à portée de distance. En outre, vous avez beaucoup d'espaces dans votre regex - ils importent!
Les deux derniers exemples «non valides» apparaissent également comme des exemples «valides» également. Je soupçonne que vous avez eu l'intention de "couper-coller-éditer" mais a été distrait après les deux premières étapes et j'ai oublié de terminer la dernière étape.