2011-10-10 18 views
8

ben bir javascript böyle yerini oluşturabilirsiniz biliyoruz: programlı

str = str.replace(/mytarget/g, 'some value');

literal mytarget tüm tekrarlarını değiştirmek edeceğini. Bununla birlikte, regex değiştirmede kullanmak istediğim çok sayıda sözcük/deyim var ve düzenli ifadeler yalnızca dil öğeleridir (bildirimde bulunulduğunda bir dizeye sarılı değiller), yeniden ifade etmenin bir yolunu bulamıyorum Onları sabit kodlamadıkça programlı olarak. Ben Yani eğer:

str = str.replace(/word/g, 'some value');

str = str.replace(/another/g, 'some value');

str = str.replace(/hello/g, 'some value');

I gibi ben İfadelerinin kullanabilirsiniz bir örnek gönderilmesi için lütfen:

var arr=['word', 'another', 'hello'];

Ben üretmek istiyorum beyaz boşluk gibi tekrar ifadelere daha fazla ifade ekleyeceğim bu yüzden regexp yoluna ihtiyacım vardı. Son olarak, lütfen eval kullanarak teklif etmeyin, eminim daha iyi bir yol var. Eğer olacak unutmayın

var word = 'hello'; 
var re = new RegExp("\\b" + word + "\\b","g"); 

- Eğer anında reg-exp ürettiğini olursa

+0

Eğer g, i gibi değiştiricileri geçebilir dize, neden normal ifadeler kullanıyor da nedir? Sadece basit bir [dize değiştirme] yapın (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace). – Quentin

+0

ve değiştirme modeli sadece yukarıda açıkladığım nedenlerle bir regexp'dir. –

cevap

13

ile \ karakterlerinden kaçması gerekir Bunun için RegExp yapıcı işlevini çağırmanız gerekir. Örnek:

['word', 'another', 'hello'].forEach(function(word) { 
    var myExp = new RegExp(word, 'g'); 
    str = str.replace(myExp, 'some value'); 
}); 

yapıcısı için ilk argüman anlamıyla // İnbetween örtecek bir şey götüren bir dizedir. İkinci menü noktası vb

0

, sen Böyle dinamik bir RegEx inşa edebilirsiniz

var a = new RegExp("word") 
3

RegExp nesnesini kullanabilirsiniz \\

2
for(i in arr) 
{ 
    str = str.replace(new RegExp("\\"+arr[i],"g"), "some value") 
}