2012-12-15 16 views
14

क्या यह अस्तित्व में है?रूबी के स्ट्रिंग के स्कैनर समकक्ष # स्कैन

the dog from the tree 

और तरह

[[null, "the dog"], ["from", "the tree"]] 

कुछ जो मैं एक रेगुलर एक्सप्रेशन और String#scan साथ रूबी में क्या कर सकते हैं मिलता है:

मैं इस तरह की स्ट्रिंग पार्स करने के लिए की जरूरत है।

जावास्क्रिप्ट का String#match तो यह

["the dog", "from the tree"] 

तरह क्योंकि मैं अपने रूबी आवेदन में String#scan कई बार इस्तेमाल किया कुछ देता है, के रूप में यह सिर्फ लौटने वाला रेगुलर एक्सप्रेशन क्या मेल खाते हैं और नहीं कर रहा है पर कब्जा समूह इस संभाल सकते हैं, यह होगा अच्छा है अगर मेरे जावास्क्रिप्ट पोर्ट में इस व्यवहार को दोहराने का एक त्वरित तरीका था।

संपादित करें: http://pastebin.com/bncXtgYA

उत्तर

10
String.prototype.scan = function (re) { 
    if (!re.global) throw "ducks"; 
    var s = this; 
    var m, r = []; 
    while (m = re.exec(s)) { 
     m.shift(); 
     r.push(m); 
    } 
    return r; 
}; 
+0

मैंने इसे अपने कोड में जोड़ा और सीधे '.match' को' .scan' में बदल दिया लेकिन यह अभी भी काम नहीं करता है। यहां मैं RegExp का उपयोग कर रहा हूं: http://pastebin.com/bncXtgYA (परीक्षण स्ट्रिंग: '"पेड़ में कुत्ता" ') मैंने प्रतिलिपि बनाई है कि रूबी से सीधे RegExp और मैं जेएस RegExp के लिए नया हूँ इसलिए वहां हो सकता है इसके साथ कुछ समस्याएं हो। – itdoesntwork

+0

"* काम नहीं करता * * व्यर्थ है। मैंने पेड़ में कुत्ते की कोशिश की ".scan (/ (? :(in | in | to | at | से))? ((? :(?: the | a | an))? (?: \ D + \। | सभी \।)? (?: \ w + | '[a-zA-Z0-9 \ s] *?'))/gi) 'और [[अपरिभाषित," कुत्ता "] मिला, [" "," पेड़ "]]'। – melpomene

+0

आह, क्षमा करें, मैं एक डम-डम हूं और मैंने आउटपुट को सही ढंग से नहीं पढ़ा। धन्यवाद! – itdoesntwork

5

यहाँ String.replace का उपयोग कर एक और कार्यान्वयन है:

String.prototype.scan = function(regex) { 
    if (!regex.global) throw "regex must have 'global' flag set"; 
    var r = [] 
    this.replace(regex, function() { 
     r.push(Array.prototype.slice.call(arguments, 1, -2)); 
    }); 
    return r; 
} 

यह कैसे काम करता: replace हर मैच पर कॉलबैक लागू करेगा, गुजर यहाँ RegExp मैं उपयोग कर रहा हूँ है यह मिलान किए गए सबस्ट्रिंग, मिलान किए गए समूह, ऑफसेट और पूर्ण स्ट्रिंग। हम केवल मिलान किए गए समूह चाहते हैं, इसलिए हम अन्य तर्कों से slice

+0

मैंने इसे पहले उल्लेख किया है, लेकिन कभी नहीं समझा कि इस तरह कुछ कैसे लागू किया जाएगा। मैं अब कोशिश करूँगा। धन्यवाद! – itdoesntwork

+0

और, वैसे, यहां मैं RegExp का उपयोग कर रहा हूं। क्या मैं कुछ भी गलत कर रहा हूं? http://pastebin.com/bncXtgYA – itdoesntwork

+0

@itdoesntwork यह क्रोम में मेरे लिए काम करता है। आप किस ब्राउज़र/ब्राउज़र संस्करण का उपयोग कर रहे हैं? – int3

संबंधित मुद्दे