2016-11-21 8 views
-2

Ich habe Zeichenfolge Muster wie nam1|val1, nam1|val1,name2|val2, nam1| und nam1|val1,. Ich habe Regulärer Ausdruck haben, das gegebene Muster zu finden, ist wahr oder falschRegulärer Ausdruck, um bestimmte Zeichenfolge Muster

Eingang und Ausgang

"nam1|val1" -> true 
"nam1|val1,name2|val2" -> true 
"nam1|" -> false 
"nam1|val1," -> false 
"nam1|val1,name" -> false 
"nam1|val1,name|" -> false 

Antwort

2

Ganz einfach wäre: ^\w+\|\w+(,\w+\|\w+)*$ sicher, dass die Zeichenfolge

Der erste Teil, ^\w+\|\w+ schaut zu machen beginnt mit mindestens 1 abgeschlossen name|value Paar.

Dann sagt der zweite Teil, (,\w+\|\w+)*, dass das gleiche Muster unendlich wiederholen kann, solange zwischen dem ersten Paar und allen nachfolgenden Paaren ein Komma ist. (Obwohl , quantifizieren die Sternchen, dass der zweite Abschnitt des Musters nicht auftreten kann.)

Schließlich wird die $ sagt, dass die Zeichenfolge mit diesem Musterabgleich enden. (Dh, kann dieses Muster nicht nur ein Teil der Zeichenfolge übereinstimmen Es muss die gesamte Zeichenfolge übereinstimmen, da der ^ und $..)

dieses Muster formatieren für Javascript, einfach werfen ein Schrägstriche an beiden Enden, so: /^\w+\|\w+(,\w+\|\w+)*$/ Das Muster sollte keine Flags benötigen.

Es ist erwähnenswert, wenn Sie komplexere Namen/Werte übereinstimmen müssen, die außerhalb des Zeichenbereich von \w sind, dann sollten Sie alle \w s mit [Some Character Set(s)] ersetzen.

2

Wenn mehrere Paare haben zu überprüfen, können Sie Ihre regex auf gespaltet String-Elemente mit einer every Funktion anwenden:

isValidPairs = function(str) { 
 
    return str.split(',').every(function(elt) { 
 
    return /^\w+\|\w+$/.test(elt); 
 
    }); 
 
} 
 

 
pairsArr = ["nam1|val1", "nam1|val1,name2|val2", "nam1|", "nam1|val1,", "nam1|val1,name", "nam1|val1,name|"]; 
 
pairsArr.forEach(function(str) { 
 
    console.log('%s: %s:', str, isValidPairs(str)); 
 
});

Verwandte Themen