आपको लगता है कि कोड काम नहीं करता है:
var = "Value"
str = "a test Value"
p str.gsub( /#{var}/, 'foo' ) # => "a test foo"
यदि संस्करण नियमित अभिव्यक्ति मेटा-वर्णों को शामिल कर सकते हैं तो चीजें अधिक दिलचस्प हो जाती हैं। यदि ऐसा होता है और आप चाहते हैं कि वे जो कुछ भी करते हैं, वे आम तौर पर एक नियमित अभिव्यक्ति में करते हैं, तो वही gsub काम करेगा:
var = "Value|a|test"
str = "a test Value"
str.gsub( /#{var}/, 'foo' ) # => "foo foo foo"
हालाँकि, यदि आपके खोज स्ट्रिंग में मेटाचैकर्स हैं और आप नहीं चाहते कि उन्हें मेटाचैकर के रूप में व्याख्या की जाए, तो इस तरह से Regexp.escape का उपयोग करें:
var = "*This*"
str = "*This* is a string"
p str.gsub( /#{Regexp.escape(var)}/, 'foo' )
# => "foo is a string"
या बस एक नियमित अभिव्यक्ति के बजाय gsub को एक स्ट्रिंग दें। MRI> = 1.8.7 में, gsub एक स्ट्रिंग प्रतिस्थापन तर्क को एक सादे स्ट्रिंग के रूप में मानेगा, न कि एक नियमित अभिव्यक्ति:
var = "*This*"
str = "*This* is a string"
p str.gsub(var, 'foo' ) # => "foo is a string"
(यह हुआ करता था कि gsub के लिए एक स्ट्रिंग प्रतिस्थापन तर्क स्वचालित रूप से एक नियमित अभिव्यक्ति में बदल गया था। मुझे पता है कि यह 1.6 में इस तरह था। मुझे याद नहीं है कि किस संस्करण ने बदलाव पेश किया है)।
अन्य उत्तरों के अनुसार, आप प्रक्षेप के विकल्प के रूप में Regexp.new का उपयोग कर सकते हैं:
var = "*This*"
str = "*This* is a string"
p str.gsub(Regexp.new(Regexp.escape(var)), 'foo' )
# => "foo is a string"