match не возвращает группу захвата

Я пытаюсь применить регулярное выражение к строке в поисках любых заполнителей, но не могу понять, почему результатом является только полное совпадение, а не группа захвата.

//----HTML------------------------//    
<p>Let's try plaintext.<br/>
bommdidumpidudidoo</p>

<p id="output"></p>

//----JS------------------------//    
var s = $('p').html();
var matches = s.match( /.*(plaintext)/g );

write(matches);
write(matches[0]);
write(matches[1]);



//------- whatever -------//
function write(s) {
    $('#output').html( $('#output').html() +'<br/>'+s );
}

// output:
// Let's try plaintext
// Let's try plaintext
// undefined

» fiddle
(я использовал свою пользовательскую функцию write вместо console.log, чтобы результат отображал на скрипке)

Почему третья строка не определена? Я не понимаю!

Я довольно уверен, что выражение правильное. Я на 100% уверен, что это правильный синтаксис группы захвата для JavaScript, и что .match() сначала возвращает массив с полным совпадением, а затем все группы захвата. Я даже проверил это с regex101.com — там я получаю группу захвата.

Это не то же самое, что эта другая проблема, потому что , суть проблемы заключалась в логике ИЛИ, а здесь труба | даже не всплывает.


person WoodrowShigeru    schedule 14.11.2015    source источник
comment
Этот другой поток связан, но как это дубликат? Я также не спрашивал о кавычках, и ни один из ответов не помечал модификатор g как причину того, что .match() не возвращает группы захвата.   -  person WoodrowShigeru    schedule 16.11.2015


Ответы (1)


Ооо! Это потому, что я выполняю глобальный поиск с модификатором g. Я получаю ожидаемый результат, если удаляю этот модификатор. Цс.

Я использовал этот модификатор в первую очередь для того, чтобы захватить несколько заполнителей, но я думаю, что я все еще могу зацикливать эти вещи…

person WoodrowShigeru    schedule 14.11.2015