2011-10-12 16 views

Odpowiedz

16

Tak, prawie to macie. Wystarczy przekazać ciąg regex do konstruktora RegExp. Następnie możesz wywołać jego funkcję test().

var matcher = new RegExp("%" + number + ":", "g"); 
var found = matcher.test(textinput); 

nadzieję, że pomoże :)

+0

Dzięki MicronXD, nie byłem świadomy konstruktora regexp. – Jamex

7

Trzeba zbudować regex przy użyciu regex obiekt, zamiast regex dosłowne.

Z Twojego pytania nie wiem dokładnie, jakie są twoje pasujące kryteria, ale jeśli chcesz dopasować liczbę wraz ze znacznikami "%" i ":", możesz zrobić coś takiego:

var matcher = new RegExp("%" + num_to_match + ":", "g"); 

można przeczytać więcej tutaj: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

+0

Dzięki Gopher, nie wiedziałem o tym poleceniu. – Jamex

5

Jesteś na właściwej drodze

var testVar = '%3:'; 

var num = 3; 

var patt = '%' + num + ':'; 

var result = patt.match(testVar); 

alert(result); 

przykładu :http://jsfiddle.net/jasongennaro/ygfQ8/2/

Nie powinieneś używać number. Chociaż nie jest słowem zastrzeżonym, jest to jedna z predefiniowanych nazw klas/obiektów.

A twój wzór jest w porządku bez przekształcania go w literał regex.

+1

Twój przykład działa, ponieważ masz załadowane MooTools. Ciąg normalnie nie ma metody ".test()". A "liczba" nie jest słowem zastrzeżonym. – user113716

+1

@ Ӫ _._ Ӫ Masz rację !! Zbyt duże myślenie w ramach. Edytowałem, aby usunąć 'test()' dla 'match()'. Dzięki za połów. Masz również rację, że 'liczba' nie jest słowem zastrzeżonym. Edytował to również, aby było bardziej jasne. Szybkie pisanie bez podwójnego sprawdzania moich faktów. ;-) –

+0

Dziękuję Jasonowi za twój wysiłek w nauczaniu. – Jamex

0

W dzisiejszych czasach wiele osób korzysta z babel ES6 składni. Jeśli tak jest w twoim przypadku, istnieje opcja bez łączenia ciągów:

const matcher = new RegExp(`%${num_to_match}:`, "g"); 
Powiązane problemy