2012-03-06 18 views
10

मैं एक आरजीबी स्ट्रिंग के व्यक्तिगत मान प्राप्त करने की कोशिश कर रहा हूं। मैं करीब आ रहा हूं, लेकिन मैं सिर्फ दीवार मार रहा हूं। मैं इस तरह कुछ करने के लिए देख रहा हूँ:आरजीबी मानों के लिए जावास्क्रिप्ट नियमित अभिव्यक्ति

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); 

मैं बस के लिए देख रहा हूँ:

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

मैं भी इसे बनाने के लिए इतना है कि regex या तो 1 ले जा सकते हैं करने के लिए कोशिश कर रहा हूँ, 2, या 3 संख्याएं, क्योंकि मान 0 - 255 से जाते हैं। किसी भी मदद के लिए धन्यवाद!

+2

'/^आरजीबी \ ((\ d +), (\ d +), (\ d +) \) $/' – Orbling

+0

यह सबसे अच्छा काम करने लग रहा था, धन्यवाद, ऑर्बलिंग! – cja

उत्तर

14

यहाँ कुछ उदाहरण कोड है कि लगभग कि तुम क्या जरूरत है सही दिशा में करते हैं या आप स्थापित करना चाहिए है: यह मिलान अंक की बात है

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]); 
} 

आप यहाँ कार्रवाई में इसे देख सकते हैं: http://jsfiddle.net/xonev/dRk8d/

+0

कभी आश्चर्यचकित नहीं होता है। धन्यवाद, स्टीवन, यह पूरी तरह से काम किया! और हर किसी के बेहद तेज़ प्रतिक्रियाओं के लिए भी धन्यवाद। – cja

+0

मैंने इस कोड का उपयोग किया, लेकिन मैंने ऑर्बलिंग के रेगेक्स का इस्तेमाल किया। किसी कारण से यह बेहतर काम करता है। मुझे यकीन नहीं है कि क्यों। कभी-कभी आपका रेगेक्स काम नहीं करेगा, एक नल का उत्पादन। अभी भी अद्भुत मदद, धन्यवाद! – cja

+0

मेरे रेगेक्स और ऑर्बलिंग के बीच अंतर हैं: ऑर्बलिंग की आवश्यकता है कि स्ट्रिंग में रंग परिभाषा एकमात्र चीज हो (उसके पास एंकर टैग हैं जो स्ट्रिंग की शुरुआत और अंत से मेल खाते हैं), ऑर्बलिंग की संख्या 3 से अधिक अंकों के साथ की अनुमति देती है (केवल मेरा 1, 2, या 3 अंक की अनुमति देता है), और ऑर्बलिंग की रिक्त स्थान की अनुमति नहीं है। अन्यथा वे बहुत समान हैं। आर्क का रेगेक्स वास्तव में सबसे सामान्य हो सकता है - यह व्यक्तिगत संख्याओं, अल्पविरामों आदि के बीच किसी भी (या नहीं) सफेद जगह की अनुमति देता है –

8

इस regex का प्रयास करें:

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

यह $ 2 में $ 1, ग्राम मूल्य में आर मूल्य पर कब्जा होगा, और में $ 3

5

एक स्ट्रिंग को देखते हुए वैध rgb है ख मूल्य, संख्या को पार्स बाहर

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

यह 'exec' के साथ क्यों काम नहीं करता है? यह केवल '[" 0 "]' – yckart

+0

@yckart देता है: यह एक वैश्विक regexp है, इसलिए आपको कई बार'exec' 'की आवश्यकता है। प्रत्येक रन आपको एक अगला मैच प्राप्त होगा। इस मामले में: 'var regexp =/\ d +/g; var r = regexp.exec (str) [0]; var g = regexp.exec (str) [0]; var b = regexp.exec (str) [0]; '। – pimvdb

0

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

प्रारूप x; x; x जहां x एक संख्या है के बीच 0 (शामिल है) और 255 (शामिल)

+0

यह 24 9 या समान मानों की अनुमति नहीं देगा। 250 की अनुमति है और 255, लेकिन 2 [0-5] {6,7,8,9} नहीं है। – EWit

7

मैं इस "^(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])\)?)$" साथ आए हैं सहित स्ट्रिंग रूपों की एक पूरी ढेर मान्य कर सकते हैं जो:

,210
  • 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

इस प्रयास करें। श्रेणी 0 - 255 के भीतर एक regex।

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

मैं इस एक का उपयोग करें: rgb\(\s*(?:(?:\d{1,2}|1\d\d|2(?:[0-4]\d|5[0-5]))\s*,?){3}\)$

  • उपसर्ग है rgb
  • अंत में

    हम {3} है तो इसका मतलब है हम करेंगे चेकों के नीचे से स्थिति 3 बार

  • \d{1,2} यदि मान के अंदर केवल 1 या 2 प्रतीक हैं - जाँच अगर वहाँ अंक हैं

  • 1\d\d यदि मान के अंदर 3 अंक है और पहले से एक है 1 के बराबर है और उनमें से बाकी अंक हैं

  • 2(?:[0-4]\d|5[0-5]) यदि मान के अंदर 3 अंक है और पहले से एक है 2 तो
    • ?:[0-4]\d के बराबर है, तो दूसरा प्रतीक सीमा में है 0-4 तीसरा का होना चाहिए किसी भी अंकों
    • 5[0-5] दूसरा प्रतीक है अगर 5 फिर तीसरे प्रतीक के बराबर श्रृंखला से अंकों की होनी चाहिए 0-5
संबंधित मुद्दे