2013-02-13 3 views
2

J'ai la chaîne suivanteComment obtenir les dernières lettres d'une chaîne?

str = '"Apples" AND "Bananas" OR Gala Me' 

Je veux peu le « Gala Me » à la fin. Les mots «ET», «OU», ou n'importe quoi entre guillemets peuvent être considérés comme un jeton. J'ai cette expression régulière.

regex = /AND|OR|"[^"]+"/g 

Il correspond à tous mes jetons mais comment pourrais-je obtenir le contraire de ce regex pour obtenir la sous-chaîne inégalée?

+0

ce que sur l'utilisation^(non) –

+2

wat? Quel est votre but ultime? –

+0

une expression régulière qui correspond à n'importe quoi après le dernier 'AND' ou 'OR' – spinners

Répondre

4

Vous pouvez split() la chaîne en utilisant les jetons:

var parts = str.split(/\s*(?:AND|OR|"[^"]+")\s*/) 

// ["", "", "", "", "Gala Me"] 

En option, vous pouvez les filtrer par longueur:

var parts = str.split(/\s*(?:AND|OR|"[^"]+")\s*/).filter(function(s) { 
    return s.length > 0; 
}); 

// ["Gala Me"] 

Ensuite, vous sélectionnez le dernier élément (le cas échéant):

if (parts.length) { 
    console.log(parts.pop()); 
} 

// "Gala Me" 
+0

une solution la plus agréable, les félicitations – spinners

+0

Et un doublure: var last = str.split (/ \ s * (?: ET OU | | "[^"] + ") \ s * /). Pop(); ' – iambriansreed

0

exp régulière ression qui correspond à quoi que ce soit après le dernier 'ET' ou 'OU'

.*(?:AND|OR)(.*)$ 
------------ 
| 
|->matches greedily until the last AND or OR 

Groupe 1 capture votre chaîne requise ..

+0

Devrait-il être'. * AND | OR (. *) $ '? – iambriansreed

+0

@iambriansreed qui correspondrait à tout ** jusqu'à ** AND ou qui ** commence ** avec OR – Anirudha

+0

cela ne fonctionne pas – spinners

Questions connexes