2015-12-07 5 views
5

Nie wiem, czy to było wcześniej zadawane, ponieważ angielski nie jest moim pierwszym językiem i nie znam słowa kluczowe do wyszukiwania.Podział osoby [0] .email na ["osoba", "0", "email"]

Więc w zasadzie mam następujący element wejściowy,

<input type="email" name="person[0].email" /> 

Chciałbym podzielić na 3 części nazwy jak ["person", "0", "email"].

Próbowałem użyć /(\[[^[\]]])|\./, ale daje ["person", "[0]", "", undefined, "email"]. Również dla a[0][1].b[3].c, to powinien wypisać ["a", "0", "1", "b", "3", "c"]

Odpowiedz

5

Można użyć .match zamiast .split

console.log("person[0].email".match(/\w+/g));

Uwaga (dzięki@npinti): w przypadku, gdy w imię będzie być _ mój pierwszy przykład będzie pasował również _, więc w tym przypadku wystarczy po prostu użyć wyrażenia regularnego jak ten

console.log("person[0].email".match(/[A-Za-z0-9]+/g));

+2

Należy pamiętać, że '\ w' jest identyczne z' [A-Za-z0-9_] '(zwróć uwagę na dodatkowy underscrore). Nie jestem pewien, czy OP chciałby zachować podkreślenie jako część meczu. – npinti

+1

@ npinti tak, dobry punkt. Jednak w odpowiedzi nie ma wzmianki o '_' tylko' person [0] .email', w każdym razie głosuję na twój komentarz, jest użyteczny. –

1

Wygląda jak chcesz przerwać na coś co nie jest literą lub liczbą, więc można użyć tego: [^A-Za-z0-9]+. Przykład tego wyrażenia jest dostępny here.

0

Można użyć tej dzielone: ​​

var m = person[0].email".split(/[.\[\]]+/g) 
//=> ["person", "0", "email"] 

czyli

m = "a[0][1].b[3].c".split(/[.\[\]]+/g) 
//=> ["a", "0", "1", "b", "3", "c"] 
0

Jeśli zawsze mają następujący format: name[i].prop, można to zrobić bez wyrażeń regularnych:

function splitName(s) 
 
{ 
 
    var parts1 = s.split('].'); 
 
    var parts2 = parts1[0].split('['); 
 

 
    return [parts2[0], parts2[1], parts1[1]]; 
 
} 
 

 
document.body.innerHTML += JSON.stringify(splitName('name[i].prop')) + '<br/>'; 
 
document.body.innerHTML += JSON.stringify(splitName('person[0].email')) + '<br/>'; 
 
document.body.innerHTML += JSON.stringify(splitName('a[0].b')) + '<br/>';

Jest mniej elegancki, nie jest uniwersalny i działa tylko w określonym formacie. Jednak nie ma wyrażeń regularnych i jeśli pracujesz tylko w tym formacie - dlaczego nie? :)