2009-11-08 6 views
25

Czy istnieje sposób przekazania zmiennej do wyrażenia regularnego w jQuery/Javascript?Jak przekazać zmienną do regex w jQuery/Javascript

Chcę zrobić coś takiego:

var variable_regex = "bar"; 
var some_string = "foobar"; 

some_string.match(/variable_regex/); 

W Ruby byłbyś w stanie zrobić:

some_string.match(/#{variable_regex}/)

Znaleziony przydatny wpis:

How can I concatenate regex literals in JavaScript?

+0

duplikat (https://stackoverflow.com/questions/494035/how- do-you-use-a-variable-in-a-regular-expression) –

Odpowiedz

17

To proste:

var variable_regex = "bar"; 
var some_string = "foobar"; 

some_string.match(variable_regex); 

Wystarczy stracić //. Jeśli chcesz używać skomplikowanych regexes, można użyć ciąg konkatenacji [? W jaki sposób użyć zmiennej w wyrażeniu regularnym]

var variable_regex = "b."; 
var some_string = "foobar"; 

alert (some_string.match("f.*"+variable_regex)); 
+1

Miałem złożony wyrażeń regularnych i chciałem interpolować wzór zmiennej do wyrażenia zakodowanego na sztywno, ale myślę, że po prostu ustawię każdą permutację wyrażenia regularnego na całą zmienną. –

+2

Nie sądzę, że można zastosować opcje wyrażeń regularnych w tej wersji (na przykład globalna wielkość liter nie ma znaczenia). Powiedziałbym, że @ Odpowiedź Jonathana jest bardziej odpowiednia niż ta. – nzifnab

+0

Działa również tylko z dopasowaniem. Inne wywołania, takie jak zamiana, wymagają jawnego skonstruowania wyrażenia regularnego. – bronson

44

Javascript nie obsługuje interpol acji jak Ruby - trzeba użyć konstruktora RegExp:

var aString = "foobar"; 
var pattern = "bar"; 

var matches = aString.match(new RegExp(pattern)); 
+6

W przypadku, gdy chcemy zastosować opcje wyrażeń regularnych, możemy zrobić: nowy Regex (wzorzec, "gi") dla globalnego, bez rozróżniania wielkości liter. – Mike

+0

Komentarz @Mike musi zostać poprawiony. Powinien to być 'nowy RegExp (wzór [, flagi])' nie tylko ** Regex ** –

+1

ES2015 obsługuje interpolację wyrazów w łańcuchach szablonów. –

Powiązane problemy