2013-10-12 2 views
2

J'essaie de faire correspondre certaines chaînes et même si je dois échapper à certains caractères spéciaux, il ne correspond toujours pas correctement.regex correspondant avec des métacaractères de caractères spéciaux

Je cette

var first=/.+?(?=\[)/i 

qui correspond encore toute la chaîne qui doit correspondre uniquement à la première [

c'est l'entreprise string [compte]

je dois correspondre les affaires correspondent alors au compte. C'est pour un plugin qui sera utilisé pour obtenir les notations d'objets avec ceux-ci plus tard. Chaque élément a un attribut différent.

+0

'Essayez .match (/ (\ w +) \ [(\ w +) \] /)' pour extraire les deux. – elclanrs

Répondre

2

Pour quelque chose d'aussi simple, un lookahead n'est pas vraiment nécessaire. Essayez d'utiliser une classe de caractères comme ceci:

var first = /[^[]+/ 

Cela correspondra à un ou plusieurs caractères quelconques autre que[.

Si vous souhaitez travailler cela en une expression régulière qui peut correspondre aux deux parties d'une chaîne comme "business[account]", essayez ceci:

/([^[]+)\[([^\]]+)\]/ 

Cela correspondra un ou plusieurs caractères quelconques autre que[ , capturé dans le groupe 1, suivi d'un [, suivi d'un ou de plusieurs des caractères autres que], capturés dans le groupe 2, suivis de ].

E.g.

console.log(/([^[]+)\[([^\]]+)\]/.exec("business[account]")); 
// ["business[account]", "business", "account"] 
+0

Fermer très proche s'attendre à ce qu'il attrape toujours le dernier] – EasyBB

+0

Ok j'aime celui-ci. Bien que je n'aime pas la sortie. ["étendre [moi]", "étendre", "moi", index: 0, entrée: "étendre [moi]] – EasyBB

+0

@EasyBB Qu'est-ce que vous n'aimez pas à ce sujet? Y at-il quelque chose de mal à la sortie? –

2

Vous êtes presque là; il suffit d'ajouter des groupes (avec des parenthèses) pour correspondre à ce que vous voulez:

var m = /(.+?)\[(.+?)\]/.exec("business[account]"); 
console.log("variable: " + m[1], "index: " + m[2]); 
+0

Je reçois un groupe non terminé – EasyBB

+1

@ EasyBB Assurez-vous que vous n'avez pas une faute de frappe quelque part. [Voici une démo en ligne] (http: // jsfiddle.net/hcSmf /) – phihag

+0

Ok super je ne sais pas pourquoi mais ça marche maintenant. Bien que je devrais utiliser les opérateurs paresseux ou devrais-je utiliser l'expression rationnelle de p.s.w.g – EasyBB

Questions connexes