2010-07-20 12 views
55

Czy jest możliwe, aby w JavaScript zrobić coś takiego jak preg_match w PHP?preg_match w JavaScript?

Chciałbym być w stanie uzyskać dwóch liczb z ciągiem:

var text = 'price[5][68]'; 

do dwóch zmiennych rozdzielonych:

var productId = 5; 
var shopId = 68; 

Edit: Używam również MooTools jeśli to pomoże.

Odpowiedz

85

JavaScript ma obiekt RegExp, który robi to, co chcesz. Obiekt String ma funkcję match(), która może ci pomóc.

var matches = text.match(/price\[(\d+)\]\[(\d+)\]/); 
+26

Dla innych użytkowników google; 'text.match' zwróci wynik dopasowania. więc 'var match = text.match (/ price \ [(\ d +) \] \ [(\ d +) \] /)', a następnie 'alert (match [1]);' – Maurice

26
var text = 'price[5][68]'; 
var regex = /price\[(\d+)\]\[(\d+)\]/gi; 
match = regex.exec(text); 

dopasowanie [1] i dopasowanie [2] będą zawierać liczby, których szukasz.

5

To powinno działać:

var matches = text.match(/\[(\d+)\][(\d+)\]/); 
var productId = matches[1]; 
var shopId = matches[2]; 
4
var myregexp = /\[(\d+)\]\[(\d+)\]/; 
var match = myregexp.exec(text); 
if (match != null) { 
    var productId = match[1]; 
    var shopId = match[2]; 
} else { 
    // no match 
} 
13
var thisRegex = new RegExp('\[(\d+)\]\[(\d+)\]'); 

if(!thisRegex.test(text)){ 
    alert('fail'); 
} 

znalazłem test, aby działać bardziej preg_match gdyż zapewnia logiczną powrót. Jednak musisz zadeklarować RegExp var.

WSKAZÓWKA: RegExp dodaje własne/na początku i na końcu, więc nie należy ich przekazywać.

+6

Możesz również skrócić to za pomocą '/\ [(\ d +) \] \ [(\ d +) \] /. test (tekst) ' – FlabbyRabbit

+0

Zgadzam się, ponieważ szukałem sposobu odtworzenia funkcji sprawdzania regex w preg_match, gdy zobaczyłem tytuł tego pytania ;) – flu

+0

Korzystanie z konstruktora klasy RegExp ma tę zaletę, że jeśli chcesz interpolować zmienną we wzorcu, pobiera ciąg znaków! –

Powiązane problemy