Frage Split Person [0] .email in ['Person', '0', 'E-Mail']


Ich weiß nicht, ob das schon mal gefragt wurde, denn Englisch ist nicht meine Muttersprache und ich kenne die Suchbegriffe nicht.

Also im Grunde habe ich das folgende Eingabeelement,

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

Ich möchte den Namen in 3 Teile teilen ["person", "0", "email"].

Ich habe es versucht /(\[[^[\]]])|\./ aber es gibt ["person", "[0]", "", undefined, "email"]. Auch für a[0][1].b[3].csollte es ausgeben ["a", "0", "1", "b", "3", "c"]


5
2017-12-07 08:15


Ursprung


Antworten:


Sie können verwenden .match Anstatt von .split 

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

Hinweis (Vielen Dank  @npinti): falls es im Namen sein wird _ Mein erstes Beispiel wird auch passen _In diesem Fall müssen Sie regexp einfach so verwenden

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


5
2017-12-07 08:17



Scheint so, als würdest du alles durchbrechen wollen, was kein Buchstabe oder eine Zahl ist, also könntest du das verwenden: [^A-Za-z0-9]+. Ein Beispiel für den Ausdruck ist verfügbar Hier.


1
2017-12-07 08:17



Sie können diese Aufteilung verwenden:

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

ODER:

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

0
2017-12-07 08:18



Wenn Sie immer das folgende Format haben: name[i].propSie können dies ohne reguläre Ausdrücke tun:

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/>';

Es ist weniger elegant, nicht universell und funktioniert nur für das angegebene Format. Es gibt jedoch keine regulären Ausdrücke und wenn Sie nur mit diesem Format arbeiten - warum nicht? :)


0
2017-12-07 08:20