2009-07-31 23 views
16

Mam następujący kod, który działa, ale muszę wprowadzić różne rzeczy do obiektu wyrażenia regularnego (regex2) w czasie wykonywania. Jednak text.replace nie wydaje się być obiektem ciągowym dla wyrażenia regularnego, więc jak mogę to zrobić?Javascript String.replace z dynamicznymi wyrażeń regularnych?

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

zmiana stringObj na ciąg. Jeśli jego ciąg jest już obiektem - np. Maszyna ATM, numer Pin itp. –

+0

Czy wywołanie .replace() musi się odbywać w ramach wywołania document.write()? Czy nie mógłbyś przypisać tej wartości przed wywołaniem document.write? Wydaje się, że to rozwiązałoby problem (chyba że nie rozumiem poprawnie twojego pytania). – inkedmn

+0

Jestem współpracownikiem Alexa. StringObj miało właśnie wyjaśnić, co robimy, a nie rzeczywisty kod. –

Odpowiedz

52

Można dokonać zwykłego obiektu wyrażenie z ciągiem przy użyciu funkcji RegExp Konstruktor:

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

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

Warto zauważyć: * myString * jest wyrażeniem regularnym z znacznikiem początku i końca NO, tj. Nie "/ foo [123] /", ale "foo [123]". – BlaM

20

oprócz CMS: Konstruktor RegExp ma drugi opcjonalny flagi parametrów
(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." 

jako Flagi, które możesz se t

  • G -> Sytuacyjna (wszystkie zdarzenia)
  • I -> przypadku niewrażliwe
  • M -> wielowierszowego
+1

Musisz konstruować ciąg dynamicznie, a następnie dostarczyć flagi w drugim parametrze. nowy RegExp ("^" + dynamiczny + "+ |" + dynamiczny + "+ $", "g"). –

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

to pokazuje

10/09/2012 
0

możesz użyć eval do,

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

pa ...

+3

To wydaje się bezsensownie podatne na błędy. – Ryan

+2

Ocena jest niepotrzebna. – jdhildeb

+0

Tworzy również dwie instancje "RegExp", gdy tylko jedna jest potrzebna. –

Powiązane problemy