Как заставить регулярное выражение выбирать нужное значение при перечисление

Так работает

/Charlie:\s(.+)/

А если начинаешь перечислять

/(Charlie|Jack|Oliver|Harry|Thomas):\s(.+)/

Находит только Charlie или Jack

Для примера при вставки

Charlie: aaaaaaaaaaaaaaaaa

или

Jack: bbbbbbbbbbbbbbb

или

Oliver: vvvvvvvvvvvv

Сам код js https://jsbin.com/roweralemo/edit?html,js,output

$(function(){


    $('#text').on('change keyup click', function(){
        var text = $(this).val();
        if (text.length<10) {return};


        if (/(Charlie|Jack|Oliver):\s/.test(text) && !$('#title').val().length) {
            var title = text.match(/(Charlie|Jack|Oliver):\s(.*)/)[1];
            $('#title').val(title).trigger('change');
        }


        });
});  
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>

<p>получаем результат, в этом поле aaaaaaaaaaaaaaaaa<p>   
<input type="text" id="title"/>
<br><br><br>
<p>вставить сюда > Charlie: aaaaaaaaaaaaaaaaa<p>
<textarea style="width:200px;height:400px;" id="text"></textarea>

Результат на фото

скриншот


Ответы (1 шт):

Автор решения: ipatev_nn

Проблема в том, что у вас возвращается элемент первой группы, но когда вы добавляете новую группу, то она становится первой.
В регулярных выражения нумерация групп идет сначала выражения:

([...])(...(...))
^_____^___________первая группа
_______^________^_вторая группа
___________^___^__третья группа

Решением может быть - вывод нужной группы:

const str = `Charlie: aaaaaaaaaaaaaaaaa`;
const reg = /(Charlie|Jack|Oliver):\s(.*)/;
var res = str.match(reg);
console.log(`Это первая группа: ${res[1]}\nЭто вторая группа: ${res[2]}`);

Или же, перебор слов сделать в группе без захвата:

(?:Charlie|Jack|Oliver):\s(.*)
→ Ссылка