2012-06-06 6 views
1

On me donne une chaîne d'IDs horriblement délimitée. Chaque identifiant est entouré d'un espace ('') à gauche et d'un retour chariot à droite ('\ r'). Je veux diviser cette chaîne et récupérer tous les identifiants en javascript.Regex pour faire correspondre des choses dans sSTUFF r

Par exemple: ' hey\r my\r name\r is\r' devrait retourner tableau de ['hey', 'my', 'name', 'is']

Jusqu'à présent, j'essayé:

str.split(/ (.+)\r/g) 
str.split(/(?:\s)(.+)(?:\r)/) 
str.split(/\s(.+?=\r)/) 

Tout mais en vain. J'ai obtenu le plus proche avec str.split(/(?:\s)(.+)(?:\r)/), mais il me donne: ['', 'hey', '', 'my', '', 'name', '', 'is', '']. Qu'est-ce qui correspond aux chaînes vides?

Quelle est la regex pour faire correspondre cela?

EDIT:

Id peut avoir tout autre omble chevalier blancs, donc c'est un identifiant valide: 123 \ T234 \ n. et 'abc \ r 123 \ n456 \ t \ r' devrait retourner ['abc', '123 \ n456 \ t']

Merci!

Répondre

4

Que diriez-vous:

var parts = str.replace(/^\s+|\s+$/g, '').split(/\s+/) 

qui est, retirez-les avant et arrière des caractères blancs et puis juste divisé sur des caractères blancs internes (et les consommer tous).

> var str = ' hey\r my\r name\r is\r' 
    undefined 
> str.replace(/^\s+|\s+$/g, '').split(/\s+/) 
    ["hey", "my", "name", "is"] 

Si vous ne souhaitez que diviser le \r alors:

.split(/\r +/) 

et vous pouvez changer la garniture à:

.replace(/^[\r ]+|[\r ]+$/g, '') 
+0

chose est l'identifiant peut avoir tout autre omble chevalier espaces, c'est donc un identifiant valide: 123 \ t234 \ n. str = 'hé \ r mon nom \ r est \ ndsfs \ t \ r' devrait renvoyer un identifiant de is \ ndsfs \ t – jreptak

+0

Remplacez ensuite \ \ s par '[liste des caractères d'espaces blancs que vous voulez diviser sur] 'ou juste' \ r '(' \ r' et un espace). –

+0

Oui, juste avec: 'str.replace (/^\ + | \ r + $/g, '') .split (/ \ r + /)'. Je suppose que j'étais juste trop compliqué en essayant de penser à la façon de le faire dans un swoop regex – jreptak

2

Peut-être que je ne comprends pas la difficulté du problème, mais pourquoi ne pas simplement utiliser:

str.replace(/^[ ]?|[ ]?$/, "").split("\r "); 

Cela semble fonctionner correctement pour tous vos exemples.

+0

Pour l'id: 'hé \ r mon nom est \ ndsfs \ t \ r' il va supprimer le \ t et tout autre espace. Les ID peuvent avoir n'importe quel autre espace autre que \ r. – jreptak

+0

@jreptak Que diriez-vous de maintenant? – VisioN

0
\s*(\S*)\s*\r 

Votre match sera dans le groupe 1

javascript vous pouvez itérer sur tous les matches et la capture comme si

var myregexp = /\s*(\S*)\s*\r/g; 
var match = myregexp.exec(subject); 
while (match != null) { 
    for (var i = 0; i < match.length; i++) { 
     // matched text: match[i] 
    } 
    match = myregexp.exec(subject); 
} 
Questions connexes