2016-04-08 21 views
1

Ich habe eine Zeichenfolge, die ich mit Regex ändern muss. Also habe ich viele verschiedene Dinge ausprobiert, und so kam ich auch. Im Folgenden sind einige Beispiele dafür, was die Saite kann dieser Fall sein und was das Ergebnis sein sollte:Kombinieren Sie einige reguläre Ausdrücke

case A: "Schoenen US 30/" should become -> "30" 
case B: "Dames US 30/" should become -> "US 30" 
case C: "Dames US w30/" should become -> "US 30" 
case D: "Heren US w30/L34" should become -> "US 30/34" 
case E: "Dames US L/" should become -> "US L" 

Also, was ich tun müssen, ist: 1. Spiel der Teil: „Schoenen US“,“ Dames "und" Heren "(also inklusive Endplatz). 2. Übereinstimmung mit "w", "W", "l" und "L" in der Zeichenkette (muss entfernt werden) 3. Übereinstimmung mit "/" nur am Ende der Zeichenkette (falls vorhanden)

Also, was ich kam mit:

case A: "/\b(Dames[ ]|dames[ ]|Heren[ ]|heren[ ]|Schoenen US[ ]|[WwLl]).([0-9][0-9]).(\/)/g" with substitution "$2" 
case B & C: "/\b(Dames[ ]|dames[ ]|Heren[ ]|heren[ ]|Schoenen US[ ]|[WwLl]| \/)/g" with empty substitution 
case D: "/\b(Dames[ ]|dames[ ]|Heren[ ]|heren[ ]|Schoenen US[ ]|[WwLl])/g" with empty substitution 
case E: No idea how to do this 

Diese regulären Ausdrücken zu tun, was ich will (außer für den Fall E ofcourse). Aber das Problem ist, dass ich nur eine Regex verwenden kann, also muss ich irgendwie alle 4 von ihnen kombinieren. Ich bin ein kompletter Anfänger, wenn es um Regex geht, also, wenn jemand mich in die richtige Richtung zeigen könnte, wäre genial.

+0

-Test dann auf [Regex101.com] (http verstehen helfen: //regex101.com/) –

+0

Es gibt einige große Regex-Test-Sites. Indem ich sie benutzte, kam ich soweit, wie ich in meiner Frage beschrieben habe.Das Problem ist, dass ich keine Ahnung habe, wie ich die verschiedenen Lösungen kombinieren könnte. – Tober

+0

Simplifying hilft Ihnen, gängige Muster wie '\ b (Dames [] | dames [] | Heren [] | hehren [] | Schoenen US [] |. ([0-9] [0-9]) zu sehen. (\ /)/g' wird '\ b ([Dd] ames | [Hh] eren | Schoenen US) [] [WwLl] ([0-9] [0-9]). (\ /)/g' –

Antwort

1

Versuchen Sie, alle Fälle zu einzelnen Muster so nahe wie möglich

function tr(str) { 
    return str.replace(/(?:Schoenen US |\w+ (US))(?:[wW]?(\d+ \/)[lL]?(\d+)|[wW]?(\d+) \/ |([lL]) \/)\s*$/, "$1$2$3$4$5"); 
} 

console.log(tr("Schoenen US 30/")); // 30 
console.log(tr("Dames US 30/")); // US 30; 
console.log(tr("Dames US w30/")); //US 30 
console.log(tr("Heren es US w30/L34")); // US 30/34 
console.log(tr("Dames US L/")); // US L 

Hoffnung zu fusionieren diese Sie regex

enter image description here

+0

Es tut mir leid für meine späte Antwort Vielen Dank für Ihre Lösung und die noch bessere Erklärung Ich bin gerade dabei, das Schema herauszufinden. – Tober

1

können Sie Regex wie folgt kombinieren.

var a = 'something'; 
 
var b = '[a-z0-9]+'; 
 
var c = 'endwiththis$'; 
 

 
var regex = new RegExp(a+b+c) // /something[a-z0-9]+endwiththis$/

Ein weiteres Beispiel ...

var part1 = '^\\d{1,3}\\s[a-z]+'; 
 
var part2 = '\\s .*(?=[m-s]+)'; 
 
var part3 = '.something$' 
 

 
var combined = new RegExp(part1 ,part2,part3)

1

Basierend auf Ihren Anforderungen, die ich mit einer Lösung zu kommen, die alles übereinstimmt, die in einfangenden Gruppen bleiben sollte und passt alles sonst aber nicht erfassen, so ist die Ersetzung mehr oder weniger die Summe aller erfassten Gruppen (einige von ihnen können und werden leer sein). Ich nehme an, dass Sie Strings haben, die als Ganzes konvertiert werden sollen und dass Sie nicht zu sehr darauf achten müssen, sie zu validieren.

Schließlich wird das RegexMuster ist:

/^(?:dames|heren|schoenen us)\s+([a-z]*\s*)(?:([a-z]+)[\s/]*$|\D*(\d+)(?:[\s/]*$|(\s+\/\s+)\D*(\d+).*$))/i 

Und die ersetzen:

$1$2$3$4$5 

Ich benutzte Fall Unempfindlichkeit es ein bisschen kürzer zu bekommen, wenn jedoch hatten Sie kümmern sich um dAmEs zu nehmen und zu handhaben es in einer anderen Weise als dames, Sie müssten den i -Modifier entfernen und [Dd]ames verwenden.

Sie können eine Demo finden here

I gm -Modifier verwendet, um mehrere Beispiele zu zeigen, brauchen Sie nicht, sie zu benutzen.

+0

Vielen Dank für Ihre großartige Lösung.Ich kann nur eine Antwort als akzeptiert markieren, und ich könnte wirklich Nick Erklärung, tut mir leid. – Tober