2016-07-31 8 views
1

ich alles aus der Zeichenfolge unten extrahieren möchten, außer „von“ und „von“:Erfassen von Wörtern durch den Ausschluss einer Nicht-Erfassung Gruppe von sich wiederholenden Worte

von Old Französisch, von Lateinisch unschuldig, von unschuldig - 'nicht schädlich' (basierend auf nocere 'injure').

Das ist mein regex:

(?:from)(.*)(?:,.from)(.*) 

Für diese regex, ich Old French, from Latin innocentia und innocent- ‘not harming’ (based on nocere ‘injure’). als Ergebnis erhalten. Wie bearbeite ich mein Regex-Snippet, damit es den erwarteten Bedingungen entsprechen kann, ohne die nicht erfassende Gruppe zu wiederholen?

sollte das Ergebnis sein:

  • Old French
  • Latin innocentia
  • innocent- ‘not harming’ (based on nocere ‘injure’).
+0

In welcher Sprache sind Sie? –

+0

Ich benutze Knoten JS. –

Antwort

1
line="from Old French, from Latin innocentia, from innocent- ‘not harming’ (based on nocere ‘injure’)." 
line.split(/, from|from/) 

=>

[ '', 
' Old French', 
' Latin innocentia', 
' innocent- ‘not harming’ (based on nocere ‘injure’).' ] 

Das könnte nahe genug sein. Versuchen Sie online: https://repl.it/Chp8

+0

Vielen Dank! –

0

Sie können einfach eine Regex verwenden, um die Zeichenfolge zu teilen. Dies wird die gleichen Ergebnisse mit einer höheren Geschwindigkeit als die Backtracking Alptraum .* zurückgeben.

könnten Sie diese Regex verwenden (basierend off Ihr), dies zu tun:

(,.)?from 

Mehr Informationen über Aufspaltung here zu finden sind.

+0

Danke. Ihre Antwort hat mir auch geholfen. Abgesehen von der Split-Funktion. Gibt es keinen Weg, um pure Regex zu verwenden? –

+0

@DuyNguyen Nicht mit normalen JS regex wiederholt Capture-Gruppen. Siehe hier: http://stackoverflow.com/a/3537914/6083675 – Laurel

Verwandte Themen