2009-07-31 8 views
16

J'ai le code suivant, qui fonctionne, mais j'ai besoin d'injecter des choses différentes dans l'objet d'expression régulière (regex2) lors de l'exécution. Toutefois, text.replace ne semble pas aimer un objet chaîne pour l'expression régulière, alors comment puis-je faire ce travail?Javascript String.replace avec des expressions régulières dynamiques?

var regex2 = /\|\d+:\d+/; 
document.write("result = " + text.replace(regex2, '') + "<br>"); 
+0

changement stringObj à cordes. Si c'est une chaîne c'est déjà un objet - aka machine ATM, numéro de broche etc. –

+0

L'appel .replace() doit-il se produire dans l'appel document.write()? Ne pourriez-vous pas attribuer cette valeur avant d'appeler document.write? On dirait que cela résoudrait le problème (à moins que je ne comprenne pas votre question correctement). – inkedmn

+0

Je suis le collègue d'Alex. Le stringObj était juste pour clarifier ce que nous faisions, pas le code réel. –

Répondre

52

Vous pouvez faire un objet d'expression régulière d'une chaîne en utilisant la fonction constructeur RegExp:

var regExp = new RegExp(myString); // regex pattern string 

text.replace(regExp, ''); 
+24

À noter: * myString * est l'expression régulière sans marqueur de début et de fin, c'est-à-dire pas "/ foo [123] /", mais "foo [123]". – BlaM

20

Ajout à la CMS: Le constructeur RegExp a un second paramètre flags en option
(15.10.4 The RegExp Constructor)

var text = "This is a Test."; 

var myRegExp = new RegExp('teST','i'); 

text.replace(myRegExp,'Example'); 
// -> "This is a Example." 

comme Drapeaux, vous pouvez t

  • g -> recherche globale (toutes les occurrences)
  • i -> insensible à la casse
  • m -> multiligne
+1

Vous devez construire la chaîne dynamiquement et ensuite fournir les drapeaux dans le second param. nouvelle RegExp ("^" + dynamique + "+ |" + dynamique + "+ $", "g"). –

4
var value = "2012-09-10"; 
value = value.replace(/([0-9]{4})[\/-]([0-9]{2})[\/-]([0-9]{2})/,"$3/$2/$1"); 
alert(value); 

cela montrera

10/09/2012 
0

vous pouvez utiliser eval pour,

new RegExp(eval("/"+str+"/i")); 

bye ...

+3

Cela semble inutilement source d'erreurs. – Ryan

+2

L'évaluation est inutile. – jdhildeb

+0

Il crée également deux instances 'RegExp' lorsqu'une seule est nécessaire. –

Questions connexes