Соответствующие группы из нескольких строк [дубликаты]

Вы можете использовать эту пользовательскую библиотеку (написанную с помощью Promise) для выполнения удаленного вызова.

function $http(apiConfig) {
    return new Promise(function (resolve, reject) {
        var client = new XMLHttpRequest();
        client.open(apiConfig.method, apiConfig.url);
        client.send();
        client.onload = function () {
            if (this.status >= 200 && this.status < 300) {
                // Performs the function "resolve" when this.status is equal to 2xx.
                // Your logic here.
                resolve(this.response);
            }
            else {
                // Performs the function "reject" when this.status is different than 2xx.
                reject(this.statusText);
            }
        };
        client.onerror = function () {
            reject(this.statusText);
        };
    });
}

Пример простого использования:

$http({
    method: 'get',
    url: 'google.com'
}).then(function(response) {
    console.log(response);
}, function(error) {
    console.log(error)
});
2
задан zx81 21 July 2014 в 04:08
поделиться

1 ответ

Группа повторных захватов: номер группы остается тем же

Группа, определенная (..), является группой 1. Конец квантора + повторяет его. Каждый раз, когда движок может повторять группу (совпадающие с двумя символами), группа 1 перезаписывается.

  • Когда двигатель начинает совпадать, он захватывает aa в группу 1
  • Затем он фиксирует bb до группы 1
  • . Затем захватывает cc в группу 1.

Когда вы проверяете группу 1, двигатель возвращает cc. Все остальные записи потеряны.

(Исключением является механизм .NET, который также возвращает cc, а также позволяет проверять промежуточные захваты благодаря объекту CaptureCollection. Он будет содержать aa, bb и cc .)

С помощью (..)+(...), почему группа 1 содержит aa? Откат!

Чтобы понять это, нам снова нужно следовать по пути движка регулярного выражения.

  • Еще раз, когда двигатель начинает совпадать, он захватывает aa в группу 1
  • Опять же, он повторяет группу (..) и фиксирует bb в группе 1
  • . Опять же, он повторяет группу (..) и захватывает cc в группу 1
  • Теперь двигатель пытается сопоставить (...). Он терпит неудачу: нет никаких символов, оставшихся для потребления.
  • Двигатель отступает как в строке, так и в шаблоне регулярных выражений. + означает один или несколько раз, и мы сопоставили .. три раза, поэтому мы можем дать один или даже два. На этом этапе двигатель отказывается от последнего совпадения количественной группы (..)+, которая является cc. Мы вернулись, когда группа 1 была bb.
  • Двигатель снова пытается сопоставить (...). Осталось всего два символа: cc, поэтому он снова не работает.
  • Двигатель отступает, отказываясь от последнего совпадения количественной группы (..)+, которая является bb. На этом этапе группа 1 снова aa.
  • Двигатель снова пытается сопоставить (...). Успешно: группа 2 - bbc, а группа 1 - aa

Ссылка

4
ответ дан zx81 26 August 2018 в 17:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: