Регулярное выражение: захватить все до определенного слова (слов)

У меня есть два варианта строки что-то вроде:

The Student's Companion *Автор: Олкок, Пит; Мэй, Маргарет; Райт, Шэрон*MIL EAN/ISBN: 9781283333115

Программирование на Java: эксперт по Java*Автор: Саранг, Пурначандра*MIL EAN/ISBN: 9781280117268

Теперь я хочу взять первого Автора: Алкок, Пит и Саран, Пураначандра.

Теперь в Javascript я пытаюсь сделать:

var regex = new RegExp("(Author:)\\s(.+)(?=;|MIL)");
var regexVal = value.match(regex);
console.log(regexVal);

OR

var regex = new RegExp("(Author:)\\s(.+)(?=MIL)");
var regexVal = value.match(regex);
console.log(regexVal);

Второе регулярное выражение отлично работает, если есть один автор, однако в случае нескольких авторов я хочу выбрать значение до первого ; не MIL

| соответствует любой части, поэтому не должен ли он останавливаться при первом ; найден?

С уважением, Равиш


person Ravish    schedule 02.04.2013    source источник
comment
Если во всех других отношениях вам подходит второй вариант, попробуйте исключить ; из (.+) с помощью оператора ^.   -  person Barry Staes    schedule 02.04.2013
comment
Спасибо за ваше предложение.   -  person Ravish    schedule 02.04.2013
comment
обратите внимание, что комментарии stackoverflow также могут быть одобрены, как и ответы, если вы хотите выразить ценность.   -  person Barry Staes    schedule 03.04.2013


Ответы (2)


Вы можете использовать:

var regex = /Author:\s([^;*]+)/;

Или, если этих * нет в строке:

var regex = /Author:\s((?:(?!MIL)[^;])+)/;

or

var regex = /Author:\s([^;])+?)(?=;|MIL)/;
person Qtax    schedule 02.04.2013
comment
@Ravish Ответы принимаются, если вы хотите выразить их ценность и поблагодарить авторов. - person Barry Staes; 03.04.2013

Решил мою проблему, изменив регулярное выражение на:

(Author:)(([^;])+)(;|MIL)

Это регулярное выражение говорит: должно начинаться с «Автор:» neget ; и должно заканчиваться на ; или МИЛ.

Спасибо

person Ravish    schedule 02.04.2013