javascript - नियमित अभिव्यक्ति में आप चर का उपयोग कैसे करते हैं?




regex (11)

"ABABAB".replace(/B/g, "A");

हमेशा के रूप में: जब तक आपको करना है, Regex का उपयोग न करें। एक साधारण स्ट्रिंग को बदलने के लिए, मुहावरे है:

'ABABAB'.split('B').join('A')

तो आपको Gracenotes के जवाब में उल्लिखित उद्धरण मुद्दों के बारे में चिंता करने की ज़रूरत नहीं है।

मैं जावास्क्रिप्ट में एक String.replaceAll () विधि बनाना चाहता हूं और मुझे लगता है कि एक RegEx का उपयोग करना इसे करने का सबसे कठिन तरीका होगा। हालांकि, मैं यह नहीं समझ सकता कि एक चर को एक RegEx में कैसे पास किया जाए। मैं इसे पहले से ही कर सकता हूं जो "बी" के सभी उदाहरणों को "ए" के साथ बदल देगा।

"ABABAB".replace(/B/g, "A");

लेकिन मैं ऐसा कुछ करना चाहता हूं:

String.prototype.replaceAll = function(replaceThis, withThis) {
    this.replace(/replaceThis/g, withThis);
};

लेकिन जाहिर है यह केवल "replaceThis" टेक्स्ट को प्रतिस्थापित करेगा ... तो मैं इस चर को अपने RegEx स्ट्रिंग में कैसे पास करूं?


आप गतिशील रूप से नियमित अभिव्यक्ति बनाना चाहते हैं और इसके लिए उचित समाधान एक new RegExp(string) कन्स्ट्रक्टर का उपयोग करना है। सचमुच विशेष पात्रों के इलाज के लिए कन्स्ट्रक्टर के लिए, आपको उनसे बच जाना चाहिए। JQuery UI UI स्वत: पूर्ण विजेट में एक अंतर्निहित फ़ंक्शन है जिसे $.ui.autocomplete.escapeRegex कहा जाता है:

[...] आप अंतर्निहित $.ui.autocomplete.escapeRegex फ़ंक्शन का उपयोग कर सकते हैं। यह एक एकल स्ट्रिंग तर्क लेगा और सभी रेगेक्स वर्णों से बच जाएगा, जिससे परिणाम new RegExp() को पास करने के लिए सुरक्षित हो जाएगा।

यदि आप jQuery UI का उपयोग कर रहे हैं तो आप उस फ़ंक्शन का उपयोग कर सकते हैं, या स्रोत से इसकी परिभाषा की प्रतिलिपि बना सकते हैं:

function escapeRegex(value) {
    return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
}

और इस तरह इसका इस्तेमाल करें:

"[z-a][z-a][z-a]".replace(new RegExp(escapeRegex("[z-a]"), "g"), "[a-z]");
//            escapeRegex("[z-a]")       -> "\[z\-a\]"
// new RegExp(escapeRegex("[z-a]"), "g") -> /\[z\-a\]/g
// end result                            -> "[a-z][a-z][a-z]"

आपका पूरा समाधान यहाँ है,

नियमित अभिव्यक्ति के लिए एक variabe पास करें।

जिसे मैंने कार्यान्वित किया है वह एक टेक्स्ट फ़ील्ड से मूल्य ले कर है जिसे आप प्रतिस्थापित करना चाहते हैं और दूसरा टेक्स्ट फ़ील्ड के साथ "प्रतिस्थापित" है,

टेक्स्ट-फ़ील्ड से वैरिएबल में वैल्यू प्राप्त करना और वैरिएबल को RegExp फ़ंक्शन में आगे बढ़ने के लिए सेट करना। मेरे मामले में मैं jquery का उपयोग कर रहा हूं, आप इसे केवल जावास्क्रिप्ट द्वारा भी कर सकते हैं।

जावास्क्रिप्ट कोड:

  var replace =document.getElementById("replace}"); // getting a value from a text field with I want to replace
  var replace_with = document.getElementById("with");        //Getting the value from another text fiels with which I want to replace anather string.

  var sRegExInput = new RegExp(replace, "g");    
  $("body").children().each(function() {
    $(this).html($(this).html().replace(sRegExInput,replace_with));
  });

यह कोड बटन के ऑनक्लिक ईवेंट पर है, आप इसे कॉल करने के लिए फ़ंक्शन में डाल सकते हैं।

तो अब आप प्रतिस्थापन समारोह में चर पारित कर सकते हैं।



और स्टीवन पेनी के जवाब का कॉफ़ीस्क्रिप्ट संस्करण, क्योंकि यह # 2 Google परिणाम है .... भले ही कॉफी सिर्फ वर्णों के साथ जावास्क्रिप्ट हटा दी गई हो ...;)

baz = "foo"
filter = new RegExp(baz + "d")
"food fight".match(filter)[0] // food

और मेरे विशेष मामले में

robot.name=hubot
filter = new RegExp(robot.name)
if msg.match.input.match(filter)
  console.log "True!"

जबकि आप गतिशील रूप से बनाए गए RegExp (इस प्रश्न के अन्य प्रतिक्रियाओं के अनुसार) बना सकते हैं, मैं एक ही पोस्ट से अपनी टिप्पणी गूंज दूंगा: String.replace() का कार्यात्मक रूप बेहद उपयोगी है और कई मामलों में इसकी आवश्यकता कम हो जाती है गतिशील रूप से निर्मित RegExp वस्तुओं। (जो एक प्रकार का दर्द है 'कारण आपको स्लेश / [एजेड] + / रेगेक्सपी शाब्दिक प्रारूप का उपयोग करने के बजाय रेगएक्सपी कन्स्ट्रक्टर को स्ट्रिंग के रूप में इनपुट व्यक्त करना होगा)


यदि आप $ 1 आपके साथ काम नहीं करते हैं तो आप इसका उपयोग कर सकते हैं

var pattern = new RegExp("amman","i");
"abc Amman efg".replace(pattern,"<b>"+"abc Amman efg".match(pattern)[0]+"</b>");

यहां एक और प्रतिस्थापन है सभी कार्यान्वयन:

    String.prototype.replaceAll = function (stringToFind, stringToReplace) {
        if ( stringToFind == stringToReplace) return this;
        var temp = this;
        var index = temp.indexOf(stringToFind);
        while (index != -1) {
            temp = temp.replace(stringToFind, stringToReplace);
            index = temp.indexOf(stringToFind);
        }
        return temp;
    };

मिलान विधि के साथ चर का उपयोग करने वाले किसी भी व्यक्ति के लिए, यह मेरे लिए काम करता है

var alpha = 'fig';
'food fight'.match(alpha + 'ht')[0]; // fight

String.prototype.replaceAll = function (replaceThis, withThis) {
   var re = new RegExp(replaceThis,"g"); 
   return this.replace(re, withThis);
};
var aa = "abab54..aba".replaceAll("\\.", "v");

इस tool साथ परीक्षण करें


this.replace( new RegExp( replaceThis, 'g' ), withThis );







regex