Захватывайте слова, исключая незахватываемую группу повторяющихся слов

Я хочу извлечь все из приведенной ниже строки, кроме "from" и ", from":

от старофранцузского, от латинского Inninia, от Invinen- «не причиняющий вреда» (от nocere «вредить»).

Это мое регулярное выражение:

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

Для этого регулярного выражения в результате я получу Old French, from Latin innocentia и innocent- ‘not harming’ (based on nocere ‘injure’).. Как отредактировать фрагмент регулярного выражения, чтобы он соответствовал ожидаемым условиям, не повторяя незахватываемую группу (?:,.from)?

Результат должен быть:

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

person Duy Nguyen    schedule 31.07.2016    source источник
comment
На каком языке вы говорите?   -  person Jorge Campos    schedule 31.07.2016
comment
Я использую Node JS.   -  person Duy Nguyen    schedule 31.07.2016


Ответы (2)


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’).' ]

Что может быть достаточно близко. Попробуйте онлайн: https://repl.it/Chp8.

person TessellatingHeckler    schedule 31.07.2016

Вы можете просто использовать регулярное выражение для разделения строки. Это вернет те же результаты с большей скоростью, чем при использовании кошмара с возвратом .*.

Вы можете использовать это регулярное выражение (на основе вашего), чтобы сделать это:

(,.)?from

Дополнительную информацию о разделении можно найти здесь.

person Laurel    schedule 31.07.2016
comment
Спасибо. Ваш ответ мне тоже помог. Помимо функции split. Нет ли способа обойти это, используя чистое регулярное выражение? - person Duy Nguyen; 31.07.2016
comment
@DuyNguyen Не с обычными повторяющимися группами захвата регулярных выражений JS. См. здесь: stackoverflow.com/a/3537914/6083675 - person Laurel; 31.07.2016