2016-11-15 4 views
0

Ich bin auf der Suche nach einem Regex (das ich in Javascript implementieren kann, also keine Lookbehinds), die alle Vorkommen eines Zeichens übereinstimmen, solange es nicht ' t erscheint zwischen zwei anderen Zeichen. Zum Beispiel möchte ich alle Bindestriche übereinstimmen, solange sie nicht zwischen Pluszeichen sind.RegEx, um alle Vorkommen eines Zeichens nicht zwischen zwei anderen Zeichen zu finden

----- // should match. 
+---+ // should not match 
---+---+--- // should only match the first 3 and last 3 characters. 

Ich habe versucht, das Verfahren in this post wie so verwendet Anpassung:

[-]+(?![^+]*\+)+ 

Aber es ist passend nicht wie gewünscht. Jede Hilfe wird sehr geschätzt.

P.S. Suchen Sie speziell nach einer REGEX Lösung. Ich weiß, dass dies vielleicht nicht die optimale Lösung ist, aber ich versuche speziell, meine Kenntnisse über Regex zu verbessern.

+1

Warum muss * regex * sein? Dies ist trivial mit String-Methoden zu implementieren. –

+0

Dies ist ein XY-Problem. Bitte erklären Sie, was Sie im wirklichen Leben tun. –

+0

Ich darf keine XY Fragen zu SO stellen? –

Antwort

0

Sie können Gebrauch .replace verwenden den gesamten Text zwischen 2 + s zu entfernen:

str = str.replace(/\+-*\+/g, ''); 

Beispiel:

var str = '---+---+---'; 
str = str.replace(/\+-*\+/g, ''); 
//=> ------ 
+0

Danke für deine Antwort, aber ich frage, wie man passt die Zeichen NICHT zwischen den Bindestrichen –

+0

Ich denke, du fragst nicht zwischen Pluszeichen rechts? Mit diesem '.replace 'entfernen wir alles zwischen' + 's und lassen nur einen Teil übrig, der außerhalb von 2' + 'Zeichen steht – anubhava

1

Wenn die Trennzeichen (+ in Ihrem Fall) immer paarweise kommen, könnten Sie verwenden:

var str = 'a-b-+-c-+-d-e'; // delimter is + 
 
matches = str.match(/-(?=([^+]*\+[^+]*\+)*[^+]*$)/g, ''); 
 
console.log(matches); // 4 matches of `-`

Dies entspricht jedem Bindestrich, die eine gerade Anzahl von Plusse folgenden es hat (könnte Null sein).

Verwandte Themen