Добрый вечер, недавно ради интереса написал функцию и во время тестирования возникла довольно таки странная проблема, в чем причина понять вообще не могу, вот собственно код:
RegExp.prototype.execMatch = function(string) {
if (!this.global) return this.exec(string);
var resultArray = [];
var execArray = [];
while (execArray) {
execArray = this.exec(string);
resultArray.push(execArray);
}
return resultArray;
}
//если вставить сюда любое выражение, ошибки не будет.
(function() {
var s = "1 20 300 4000";
var reg = /(\d+)/g;
var result = reg.execMatch(s);
})();
Собственно, это функция, которая объединяет функционал методов match и exec, но суть не в этом. Почему-то, функция-выражение, которая идет сразу за определением моей функции, заставляет исполнять код execMatch и тем самым при попадании на строку:
if (!this.global) return this.exec(string);
генерируется исключение по понятным причинам.
Это, конечно, не катастрофа, но все-же, в чем моя ошибка? Чем обуславливается это странное поведение?