2010-04-27 5 views
2

je besoin d'un code javascript qui a divisé une chaîne comme ci-dessous:Ecrire une expression javascript

Chaîne d'entrée: "a => aa | b => b || b | c => cc"

sortie:

a=>aa 

b=>b||b 

c=>cc 

j'avais écrit des codes différents comme:

split(/ \ | /) 

ou

split(/ \| (?! \ |) /) 

mais n'a pas fonctionné.

s'il vous plaît aidez-moi ...

je vraiment besoin rapide.

Répondre

3

Split avec /\|(?=\s)/ pour votre cas

"a=>aa| b=>b||b | c=>cc".split(/\|(?=\s)/) 
# a=>aa 
# b=>b||b 
# c=>cc 
+0

Note: ma réponse ne fonctionne que pour l'exemple d'OP. S'il vous plaît jeter un coup d'oeil Kobi's [réponse] (http://stackoverflow.com/questions/2719300/write-an-expression-in-javascript/2719388#2719388), c'est plus approprié en fait. – YOU

0

J'ai testé la première réponse et il ne fonctionne pas comme je crois que vous l'intention:

"a=>aa| b=>b||b | c=>cc".split("\| "); 

Malheureusement, la réponse que je suis venu avec ISN » Il vaut mieux juste ajouter un espace après le marqueur de tuyau dans votre regex. Répondre aussi par @ S.Mark est valide, testé.

1

Cette confusion à la recherche regex fonctionnera sans espaces autour des tuyaux:

var matches = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g) 

au lieu de diviser, il recherche des jetons avec double tuyaux, mais pas seul. Si vous avez des espaces et devez correspondre à b=>b|b | c=>5, utilisez l'expression régulière de S.Mark, mais cela peut aider dans d'autres cas.
Pour clarifier, [^|]|\|\| lit [not a pipe] OR [two pipes].

+0

+1, le vôtre est plus approprié que le mien. – YOU

+0

Merci. Cela dépend cependant du contexte, si l'OP a des jetons avec des pipes simples (ce qui est très possible), votre version fonctionnera mieux. – Kobi

Questions connexes