2016-08-08 16 views
0

Ich habe Probleme mit Regexp Matching. In meinem Fall muss ich alle Zeichen außer denen zwischen bestimmten Tags auswählen. Mein Text würde wie folgt aussehen:passen Sie alles außer den Inhalt zwischen bestimmten Tags

Lorem ipsum dolor sit amet [original]don't select this[/original], sit epicuri qualisque id.

'und ich will nur Lorem ipsum dolor sit amet' + 'sitzen Epicuri qualisque id' ausgewählten Text zu sein. Ich habe versucht, alle Zeichen auszuwählen, als meine Phrase auszuschließen, aber ich verstehe es nicht. Wenn ich diese in Gruppen als nur das erste Mal funktioniert, aber wenn mehr diese Tags vorhanden sind, kann ich nicht das gewünschte Ergebnis erhalten.

Irgendwelche Tipps, wie ich das erreichen kann?

Antwort

0

Sie können Sammelgruppen verwenden und alles in Ihrer gewünschten Erfassungsgruppe erfassen.

^((?:(?!\[original\]).)+)\[original\](?:(?!\[\/original\]).)+\[\/original\](.+)$ 

Dies wird bei der Erfassung alles vor dem Tag setzt Gruppe 1, und alles nach Gruppe 2. Das ganze Spiel paßt die gesamte Linie, aber den Tag und alles zwischen ihm Erfassung ist nicht in einer Gruppe zu sein bei der Erfassung.

HINWEIS: Dies funktioniert nicht, wenn mehrere Tags vorhanden sind. Wenn Sie das möchten, bearbeiten Sie bitte Ihre Frage, um das zu reflektieren.

auf regex101 getestet

+0

Dank R Nar, ganz in der Nähe, Fledermaus, wie Sie bemerkte ich weitere Tags müssen in Text angezeigt werden können. Ich änderte die Frage, um das auch zu reflektieren – bigcat

+0

@bigcat In diesem Fall habe ich das Gefühl, dass dies besser ohne die Verwendung von Regex erreicht werden würde. –

+0

irgendwelche Ideen wie R Nar? Ich brauche den ausgewählten Text nach der Auswahl zu manipulieren, einen Filter anzuwenden und ihn dann zu wiederholen, wobei der Text zwischen [Original] unverändert bleibt. Irgendwelche Ideen geschätzt. Vielen Dank – bigcat

0

Als R Nar schlug ich einen anderen Ansatz verwendet, Kombinationen von regex und Split/join gewünschte Ergebnis zu erzielen.

Zuerst habe ich Split in Javascript eine Reihe von Wörtern

let words = input.split(/([original]|[/original])/);

Einmal gespaltet erstellen I angewendet Transformationen auf gewünschte Teile, und einmal Transformationen fertig sind, habe ich Methode verbinden alles wieder zusammen zu setzen.

input = words.join("");