Каждая группа, определенная в круглых скобках (), захватывается во время обработки, и каждое захваченное содержимое группы помещается в массив результатов в том же порядке, что и группы в начале шаблона. Подробнее см. http://www.regular -expressions.info / brackets.html и http://www.regular -expressions.info / refcapture.html (выберите нужный язык, чтобы увидеть поддерживаемые функции)
var source = "afskfsd33j"
var result = source.match(/a(.*)j/);
result: ["afskfsd33j", "fskfsd33"]
Причина, по которой вы получили этот точный результат, следующая:
Первое значение в массиве - это первая найденная строка, которая подтверждает весь шаблон. Поэтому он обязательно должен начинаться с «a», за которым следует любое количество любых символов, и заканчиваться первым символом «j» после начала «a».
Вторым значением в массиве является захваченная группа, определенная круглыми скобками. В вашем случае группа содержит полное совпадение с шаблоном без содержимого, определенного вне скобок, поэтому в точности "fskfsd33".
Если вы хотите избавиться от второго значения в массиве, вы можете определить шаблон следующим образом:
/a(?:.*)j/
где "?:" Означает, что группа символов, соответствующих содержанию в скобках, не будет частью результирующего массива.
В этом простом случае могут быть другие варианты написания шаблона без какой-либо группы, поскольку вообще не нужно использовать группу:
/a.*j/
Если вы хотите просто проверить, соответствует ли исходный текст шаблону и не заботится о том, какой текст он нашел, вы можете попробовать:
var result = /a.*j/.test(source);
Результат должен возвращать только истинные | ложные значения. Для получения дополнительной информации см http://www.javascriptkit.com/javatutors/re3.shtml