2013-04-02 4 views
0

я не имею два варианта струнный что-то вроде:Regex: захватить все до определенного слова (ов)

Companion Стьюдента * Автор: Alcock, Пит, май, Маргарет, Райт, Шарон * MIL EAN/ISBN: 9781283333115

программирования Java: Java Expert * Автор: Sarang, Пурначандра * MIL EAN/ISBN: 9781280117268

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

Сейчас в Javascript, что я пытаюсь сделать:

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

ИЛИ

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

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

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

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

+0

Если второй один иначе работает для вас, попробуйте исключить ';' 'из (+.)' С ''^оператора. –

+0

Спасибо за ваше предложение. – Ravish

+0

Обратите внимание, что комментарии stackoverflow также могут быть поддержаны точно так же, как ответы, если вы хотите выразить значение. –

ответ

1

Вы могли бы использовать:

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

Или, если таковые * не в строке:

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

или

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

Спасибо @Qtax, я решил свою проблему. – Ravish

+0

@Ravish Answers могут быть приняты, если вы хотите выразить свою ценность и поблагодарить авторов. –

0

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

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

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

Благодаря