2012-03-06 13 views
10

Sto cercando di ottenere i singoli valori di una stringa rgb. Mi sto avvicinando, ma sto solo colpendo un muro. Sto cercando di fare qualcosa di simile:Espressione regolare Javascript per valori rgb

var color = rgb(255, 85, 120); 

/// My Regex /// 
var rRegex = /^rgb\(\d{3}/; // Which actually gives me an array of two strings...ugh 
var gRegex = ; 
var bRegex = ; 

var r = color.match(rRegex); 
var g = color.match(gRegex); 
var b = color.match(bRegex); 

Sto solo cercando di avere:

/// // I think I can pull these off by Starts With and Ends With anchors... /// 
r = 'From "(" to "," '; 
g = 'From "," to "," '; 
b = 'From "," to ")" '; 

che sto cercando di fare anche fare in modo che la regex può prendere o 1, 2 o 3 numeri, dato che i valori vanno da 0 a 255. Grazie per qualsiasi aiuto!

+2

'/^rgb \ ((\ d +), (\ d +), (\ d +) \) $/' – Orbling

+0

Questo sembra funzionare al meglio, grazie, Orbling! – cja

risposta

14

Ecco qualche esempio di codice che dovrebbe fare circa quello che ti serve o impostare nella direzione giusta:

var color = 'rgb(255, 15, 120)'; 
var matchColors = /rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/; 
var match = matchColors.exec(color); 
if (match !== null) { 
    document.write('Red: ' + match[1] + ' Green: ' + match[2] + ' Blue: ' + match[3]); 
} 

Potete vederlo in azione qui: http://jsfiddle.net/xonev/dRk8d/

+0

Non smette mai di stupire. Grazie, Steven, ha funzionato perfettamente! E grazie anche per le risposte incredibilmente veloci di tutti gli altri. – cja

+0

Ho usato questo codice, ma ho usato la regex di Orbling. Per qualche ragione ha funzionato meglio. Non sono sicuro del perché comunque. A volte la tua espressione regolare non funziona, producendo un valore nullo. Aiuto ancora sorprendente, grazie! – cja

+0

Le differenze tra la mia regex e quella di Orbling sono: Orbling richiede che la definizione del colore sia l'unica cosa nella stringa (ha tag di ancoraggio che corrispondono all'inizio e alla fine della stringa), Orbling consente numeri con più di 3 cifre (solo il mio consente 1, 2 o 3 cifre) e Orbling non consente spazi. Altrimenti sono molto simili. la regex di arc può essere in realtà la più generica - consente qualsiasi (o nessun) spazio bianco tra i singoli numeri, virgole, ecc. –

8

Prova questo regex:

/rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/ 

Sarà acquisire il valore di R in $ 1, il valore g in $ 2, e il valore di b in $ 3

5

Data una stringa è RGB validi, l'analisi numeri su è una questione di cifre corrispondenti:

"rgb(12, 34, 56)".match(/\d+/g); // ["12", "34", "56"] 
+0

Perché non funziona con 'exec'? Restituisce solo '[" 0 "]' ... – yckart

+0

@yckart: È un'espressione regolare globale, quindi è necessario '.exec' più volte. Ogni corsa otterrai una prossima partita. In questo caso: 'var regexp =/\ d +/g; var r = regexp.exec (str) [0]; var g = regexp.exec (str) [0]; var b = regexp.exec (str) [0]; '. – pimvdb

0

^(\ d {1,2} | [1] [0-9] [0-9] | [2] [0- 5] [0-5]); (\ d {1,2} | [1] [0-9] [0-9] | [2] [0-5] [0-5]); (\ d {1,2} | [1] [0-9] [0-9] | [2] [0-5] [0-5]) $

formato x; x; x dove x è un numero tra 0 (escluso) e 255 (inclusi)

+0

Ciò non consentirebbe 249 o valori simili. 250 è consentito e 255, ma non 2 [0-5] {6,7,8,9}. – EWit

7

ho escogitato questa "^(rgb)?\(?([01]?\d\d?|2[0-4]\d|25[0-5])(\W+)([01]?\d\d?|2[0-4]\d|25[0-5])\W+(([01]?\d\d?|2[0-4]\d|25[0-5])\)?)$" che può convalidare un mucchio di variazioni stringa tra cui:

  • rgb (255,255,255)
  • rgb (255, 255, 255) rgb (0/0/0)
  • rgb (50-50-50)
  • rgb (0 - 0 - 0)
  • rgb (255,0-50)
  • rgb (0, 255 255)
  • rgb (0 0 0)
  • 255.255.255
  • 255, 255, 0
  • (0, 0, 30)
  • (255 - 255-255)
  • rgb0 0 0
  • rgb255 - 0/255
0

Prova questa. Una espressione regolare nell'intervallo 0 - 255.

rgb\(((*0*([1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]) *),){2}(*0*([1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]) *)\) 

Regular expression visualization

Debuggex Demo

1

Io uso questo: rgb\(\s*(?:(?:\d{1,2}|1\d\d|2(?:[0-4]\d|5[0-5]))\s*,?){3}\)$

  • prefisso è rgb
  • alla fine abbiamo {3} che significa che sarà assegni condizioni dal basso 3 volte

  • \d{1,2} se valore all'interno hanno solo 1 o 2 simboli - verificare se vi sono cifre

  • 1\d\d se valore all'interno ha 3 cifre e primo è uguale a 1 e resto di loro sono cifre

  • 2(?:[0-4]\d|5[0-5]) se il valore all'interno ha 3 cifre e primo è uguale a 2 poi
    • ?:[0-4]\d se secondo simbolo è nella gamma di 0-4 il terzo dovrebbe qualsiasi cifra
    • 5[0-5] se secondo simbolo è uguale a 5 poi terzo simbolo dovrebbe essere cifre da serie 0-5
Problemi correlati