Как получить совпадающую группу при передаче функции на замену? - PullRequest
0 голосов
/ 18 сентября 2011

У меня есть следующий код:

this.parse = function(whatToParse, currentItem) {
    var re = /\{j\s([a-z0-9\.\|_]+)\ss\}/gi;
    var newResult = whatToParse.replace(re, function(matches){
        alert(matches);
    });
}

whatToParse:

            <h1>
                {j name s}
            </h1>
            <div>
                <nobr>{j description s}</nobr>
            </div>

Но почему совпадения не являются массивом? Содержит только совпадающую строку без групп. Например: alert(matches); оповещения "{j name s}" и alert(matches[1]); оповещения "j".

Почему? Как получить первую группу?

P.S. Я не понимаю этого, потому что в PHP этот RegExp работает правильно.

1 Ответ

1 голос
/ 18 сентября 2011

См. Документацию [MDN] . Захваченные значения передаются в качестве аргументов функции.

Аргументы функции следующие:

Possible name   Supplied value
str             The matched substring. (Corresponds to $& above.)
p1, p2, ...     The nth parenthesized submatch string, provided the first argument to replace was a RegExp object. (Correspond to $1, $2, etc. above.)
offset          The offset of the matched substring within the total string being examined. (For example, if the total string was "abcd", and the matched substring was "bc", then this argument will be 1.)
s               The total string being examined.

(простите за форматирование, но создание таблиц в Markdown не так просто)

Итак, в вашем случае:

var newResult = whatToParse.replace(re, function(match, firstGroup){
    alert(firstGroup);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...