2012-05-14 33 views
9

में [कोष्ठक] अभिव्यक्ति की n वें घटना की जगह मैं एक रूप जहां नाम गुण अपडेट कर दिया है, लेकिन समस्या के रूप में इस बहुआयामी मानों का उपयोग कर im है:का पता लगाएं और स्ट्रिंग

<input type="text" name="questions[0][question]" /> 
<input type="text" name="questions[0][order]" /> 
<input type="text" name="questions[0][active]" /> 
<input type="text" name="answers[0][1][answer]" /> 
<input type="text" name="answers[0][2][answer]" /> 
<input type="text" name="answers[0][3][answer]" /> 

<input type="text" name="questions[1][question]" /> 
<input type="text" name="questions[1][order]" /> 
<input type="text" name="questions[1][active]" /> 
etc... 

मैं बदलने की जरूरत है ।

/(?<=\[)[^\]]*(?=\])/g 
: जावास्क्रिप्ट कोई पदार्थ के साथ वर्ग कोष्ठक क्या स्थिति वे में हैं के भीतर मूल्य मैं वर्ग कोष्ठक के बीच मान से मेल करने के लिए निम्न नियमित अभिव्यक्ति का उपयोग कर की कोशिश की है

लेकिन यह सभी घटनाओं से मेल खाता है, और मुझे जो कुछ करने की ज़रूरत है वह किसी भी तरह से nth घटना को ढूंढ और प्रतिस्थापित करता है।

या यदि नियमित अभिव्यक्तियों का उपयोग किए बिना वर्ग ब्रैकेट के भीतर मानों को ढूंढने और बदलने का कोई दूसरा तरीका है तो मैं सभी कान हूं।

अग्रिम

धन्यवाद हल

इस अंतिम कोड इस प्रकार है:

$('input', this).each(function(){ 
    var name = $(this).attr('name'); 
    var i = 0; 
    $(this).attr('name', name.replace(/\[.+?\]/g,function (match, pos, original) { 
    i++; 
    return (i == 1) ? "[THE REPLACED VALUE]" : match; 
    })); 
}); 
+0

इम पूरी तरह से आपके क्या करने की कोशिश कर रहा है कि क्या स्पष्ट नहीं! ऊपर दिए गए अपने उदाहरण का उपयोग करके आप अपेक्षित आउटपुट दिखा सकते हैं ... – ManseUK

+0

स्टैक ओवरव्लो में आपका स्वागत है। मैं देखता हूं कि इस प्रश्न को बहुत सारे विचार नहीं मिल रहे हैं, इसलिए मैंने आपके शीर्षक को स्पष्ट रूप से उस प्रश्न को प्रतिबिंबित करने के लिए संपादित किया है जिसे आप पूछ रहे हैं - ब्रैकेट में अभिव्यक्ति की nth घटना को कैसे ढूंढें और बदलें। –

उत्तर

32

यहां एक और संभावित समाधान है। आप string.replace फ़ंक्शन को फ़ंक्शन को निर्धारित कर सकते हैं यह निर्धारित करने के लिए कि प्रतिस्थापन मान क्या होना चाहिए। समारोह तीन तर्क पारित किया जाएगा। पहला तर्क मिलान पाठ है, दूसरा तर्क मूल स्ट्रिंग के भीतर स्थिति है, और तीसरा तर्क मूल स्ट्रिंग है।

निम्नलिखित उदाहरण "एम" के साथ "हेल्लो, वर्ल्ड" में दूसरे "एल" को प्रतिस्थापित करेगा।

var s = "HELLO, WORLD!"; 
var nth = 0; 
s = s.replace(/L/g, function (match, i, original) { 
    nth++; 
    return (nth === 2) ? "M" : match; 
}); 
alert(s); // "HELMO, WORLD!"; 

देखें MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace

+0

धन्यवाद डैनियल, यह पूरी तरह से काम किया। मुझे नहीं पता था कि प्रतिस्थापन फ़ंक्शन में कॉलबैक फ़ंक्शन था। –

+0

यदि यह आपके प्रश्न का उत्तर देता है, तो कृपया स्वीकृत उत्तर के रूप में चिह्नित करने के लिए इस उत्तर के बगल में स्थित चेक-चिह्न पर क्लिक करें। –

+0

बस मुझे क्या चाहिए, धन्यवाद! – SpartaSixZero

0

अगर मैं सवाल समझ में सही ढंग से RegExp नीचे दिखाया गया है क्या करना चाहिए:

var patt = /<input.*?(\[(\d)\])(\[(\d)\]){0,1}.*/g 
var res = patt.exec(' <input type="text" name="questions[0][1][question]" />'); 

alert('First number: ' + res[2] + "\nSecond number: " + res[4]); 

डेमो यहां: http://jsfiddle.net/EUcdX/

0

दृष्टिकोण को स्वीकार कर लिया जवाब में दी गई संक्षिप्त और ठोस है, लेकिन यह एक दोष है: वहाँ दिया सबस्ट्रिंग के दिखावे का एक बहुत के साथ एक बड़ी स्ट्रिंग है कि अगर, यह अंत तक स्कैन किया जाए - भले ही किसी को केवल शुरुआत में ही बदलना पड़े। वैकल्पिक 'कार्यकारी' का उपयोग किया जाएगा, तो चेन टूटकर अलग होना सही होने के बाद प्रतिस्थापन किया जाता है:

function replaceNthOccurence(source, pattern, replacement, n) { 
 
    var substr = ''; 
 
    while (substr = pattern.exec(source)) { 
 
    if (--n === 0) { 
 
     source = source.slice(0, substr.index) + replacement + source.slice(pattern.lastIndex); 
 
     break; 
 
    } 
 
    } 
 
    return source; 
 
} 
 

 
console.log(replaceNthOccurence('bla_111_bla_222_bla_333', /\d+/g, '1st', 1)); 
 
console.log(replaceNthOccurence('bla_111_bla_222_bla_333', /\d+/g, '2nd', 2)); 
 
console.log(replaceNthOccurence('bla_111_bla_222_bla_333', /\d+/g, '3rd', 3));

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