2011-10-10 9 views
8

so che posso creare un javascript sostituire in questo modo:JavaScript creare espressioni regolari a livello di codice

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

che sostituirà tutte le occorrenze di letterale mytarget. Tuttavia, ho una grande serie di parole/frasi che voglio usare in regex replace, e poiché le espressioni regolari sono solo elementi del linguaggio (non sono racchiusi in una stringa quando dichiarano), non riesco a trovare un modo per dichiarare espressioni regolari programmaticamente a meno che non li indichino a fondo. Quindi, se ho:

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

voglio produrre:

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

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

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

Si prega di inviare un esempio che posso usare espressioni regolari, come ho aggiungerò più espressioni nelle espressioni regolari come spazi bianchi ecc . Quindi ho bisogno del modo regexp. Infine, per favore non offrire l'utilizzo di eval, sono sicuro che c'è un modo migliore.

+0

Perché stai usando le espressioni regolari? Basta fare una semplice [sostituzione stringa] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace). – Quentin

+0

e il modello di sostituzione è semplicemente un'espressione regolare con i motivi che ho spiegato sopra. –

risposta

13

È necessario richiamare la funzione di costruttore RegExp per quello. Esempio:

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

Il primo argomento per il costruttore è una stringa, che prende letteralmente tutto ciò che ci si avvolgere inbetween //. Il secondo paramter è anche stringa, dove è possibile passare modificatori come g, i, ecc

0

Se si sta generando il reg-exp al volo, è possibile utilizzare l'oggetto RegExp

var a = new RegExp("word") 
3

È possibile costruire una RegEx in modo dinamico come questo -

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

Ricorda che ti è necessario sfuggire a qualsiasi carattere \ utilizzando \\

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