जावास्क्रिप्ट - स्ट्रिंग मैच में चर का उपयोग करें


89

मुझे ऐसे ही कई सवाल मिले, लेकिन इससे मुझे कोई फायदा नहीं हुआ। तो मुझे यह समस्या है:

var xxx = "victoria";
var yyy = "i";
alert(xxx.match(yyy/g).length);

मुझे पता नहीं है कि मैच कमांड में वेरिएबल कैसे पास किया जाता है। कृपया मदद करे। धन्यवाद।



एक और बात: यदि आप एक regexp के निर्माण के लिए एक चर का उपयोग कर रहे हैं, तो देखभाल की जानी चाहिए कि चर में regexp विशेष वर्ण हो सकते हैं। उदाहरण के लिए, यदि आप "c ++" पास करते हैं, तो रेगेक्स कंपाइलर शिकायत करेगाSyntaxError: Invalid regular expression: /c++/: Nothing to repeat
dotslashlu

जवाबों:


186

हालांकि मैच फ़ंक्शन रिजेक्स पैटर्न के रूप में स्ट्रिंग शाब्दिकों को स्वीकार नहीं करता है, आप RegExp ऑब्जेक्ट के कंस्ट्रक्टर का उपयोग कर सकते हैं और स्ट्रिंग स्ट्रिंग को पास कर सकते हैं।

var re = new RegExp(yyy, 'g');
xxx.match(re);

किसी भी झंडे की जरूरत है (जैसे / जी) दूसरे पैरामीटर में जा सकते हैं।


2
+1, यह पसंदीदा तरीका है, BTW, यदि matchविधि के लिए दिया गया तर्क कोई RegExpऑब्जेक्ट नहीं है , तो आंतरिक रूप से RegExpकंस्ट्रक्टर को उस मान का उपयोग करके आमंत्रित किया जाएगा, इसलिए आप एक स्ट्रिंग पैटर्न का उपयोग कर सकते हैं , जैसे:"a123".match("\\d+")[0] === "123";
क्रिश्चियन सी। साल्वाडोर

10

यदि आपका पैटर्न स्ट्रिंग है तो आपको RegExp ऑब्जेक्ट का उपयोग करना होगा

var xxx = "victoria";
var yyy = "i";
var rgxp = new RegExp(yyy, "g");
alert(xxx.match(rgxp).length);

यदि पैटर्न गतिशील स्ट्रिंग नहीं है:

var xxx = "victoria";
var yyy = /i/g;
alert(xxx.match(yyy).length);

2
MDN के बजाय w3schools का उपयोग करने के लिए आपको एक काल्पनिक डाउनवोट मिलता है! developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
परतदार

9

उदाहरण के लिए:

let myString = "Hello World"
let myMatch = myString.match(/H.*/)
console.log(myMatch)

या

let myString = "Hello World"
let myVariable = "H"
let myReg = new RegExp(myVariable + ".*")
let myMatch = myString.match(myReg)
console.log(myMatch)

6

उदाहरण। स्ट्रिंग के भीतर स्वरों की संख्या ज्ञात करने के लिए

var word='Web Development Tutorial';
var vowels='[aeiou]'; 
var re = new RegExp(vowels, 'gi');
var arr = word.match(re);
document.write(arr.length);

0

मेरे लिए वैसे भी, यह इसका इस्तेमाल देखने में मदद करता है। बस इसे "पुनः" उदाहरण का उपयोग करके बनाया है:

var analyte_data = 'sample-'+sample_id;
var storage_keys = $.jStorage.index();
var re = new RegExp( analyte_data,'g');  
for(i=0;i<storage_keys.length;i++) { 
    if(storage_keys[i].match(re)) {
        console.log(storage_keys[i]);
        var partnum = storage_keys[i].split('-')[2];
    }
}

-4
xxx.match(yyy, 'g').length

5
यह केवल फ़ायरफ़ॉक्स में काम करेगा , और यह प्रलेखित भी नहीं है। विनिर्देश बताता है कि String.prototype.matchविधि केवल एक तर्क की उम्मीद करती हैRegExpनिर्माणकर्ता का उपयोग करना , जैसा कि @ क्रिस का सुझाव है पसंदीदा तरीका है।
क्रिश्चियन सी। साल्वादो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.