Объедините два регулярных выражения в Javascript - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно регулярное выражение, которое подбирает автора в следующих сценариях

Letter from author to recipient regarding topic 11-10-2018

Letter from author, regarding topic 10-11-2018

Я пытался следовать найденным предложениямздесь и вот что у меня есть:

let commaRegex =  new RegExp(/(?<=from) (.+?),/, 'gi','$1');
let fromToRegex = new RegExp(/(?<=from) (.+?) (?=to)/, 'gi','$1');
let combinedRegex = new RegExp(commaRegex + '|' + fromToRegex);
let author = document.getElementById('userInput').value.match(combinedRegex);
console.log(author) 

Но console.log(author) возвращает 'null'.

Я использую это в Chrome, так как взгляды не поддерживаются во всехбраузеры.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Помимо решения, предоставляемого georg, на всякий случай вы хотите объединить любые два других, которые не так легко заменить одним:

Вы должны добавить источники вместо всего объекта:

let commaRegex =  new RegExp(/(?<=from) (.+?),/, 'gi','$1');
let fromToRegex = new RegExp(/(?<=from) (.+?) (?=to)/, 'gi','$1');
let combinedRegex = new RegExp(commaRegex.source + '|' + fromToRegex.source);

let sampleText = 'Letter from Joseph Tribbiani to recipient regarding topic 11-10-2018';

console.log(sampleText.match(combinedRegex));

sampleText = 'Letter from Joseph Tribbiani, regarding topic 11-10-2018';

console.log(sampleText.match(combinedRegex));
0 голосов
/ 14 декабря 2018

Нет необходимости объединять их «автоматически», просто используйте оператор или для последней части:

(?<=from )(.+?)(?=,| to)

https://regex101.com/r/xzlptd/2/

Чтобы это работало во всех браузерах, получитеизбавьтесь от осмотров

from (.+?)(?:,| to)

и выберите первую группу из матча: .match(...)[1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...