Хотелось бы глубже разобраться в нюансах javascript.

Возьмите функцию ниже:

str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    ret[param] = value;
});
  • Зачем нужен / g?
  • Что именно передается в функцию?
  • Откуда эти ценности?

Благодарность!

1
ming yeow 9 Сен 2010 в 22:18

2 ответа

Лучший ответ

Зачем нужен / g?

Поскольку предположительно у вас будет несколько пар в строке соответствия, например a:'b' c:'d'

Что именно передается в функцию?

Функция обратного вызова получает полное совпадение в качестве первого аргумента, два последующих аргумента - это группы захвата, указанные в вашем регулярном выражении.

Например:

"a:'b' c:'d'".replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    console.log($0, param, value);
});

Обратный вызов будет выполнен дважды, и он покажет вам "a:'b'" для $0, "a" для param и "b" для value при первом исполнение.

Во втором выполнении -для второго совпадения- вы увидите "c:'d'" для $0, "c" для param и "d" для значения.

5
CMS 9 Сен 2010 в 18:20

G in / g означает глобальный. Убедитесь, что все спички заменены. При отсутствии / g заменяется только первое совпадение. / i (игнорировать регистр) - еще один часто используемый переключатель.

Каждый раз, когда механизм javascript находит совпадение (для вашего регулярного выражения) в строке, он вызывает переданную вами функцию с параметрами для каждого совпадения.

Подробно объяснено здесь

1
letronje 9 Сен 2010 в 18:26