Как заставить регулярное выражение выбирать нужное значение при перечисление
Так работает
/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(.*)
