Ошибка JavaScript Regex Ошибка [дубликат]

Он всегда проходит по значению, но для объектов значение переменной является ссылкой. Из-за этого, когда вы передаете объект и меняете его членов , эти изменения сохраняются вне функции. Это делает выглядеть как пропуск по ссылке. Но если вы действительно измените значение переменной объекта, вы увидите, что это изменение не сохраняется, доказывая, что оно действительно передается по значению.

Пример:

function changeObject(x) {
  x = {member:"bar"};
  alert("in changeObject: " + x.member);
}

function changeMember(x) {
  x.member = "bar";
  alert("in changeMember: " + x.member);
}

var x = {member:"foo"};

alert("before changeObject: " + x.member);
changeObject(x);
alert("after changeObject: " + x.member); /* change did not persist */

alert("before changeMember: " + x.member);
changeMember(x);
alert("after changeMember: " + x.member); /* change persists */

Выход:

before changeObject: foo
in changeObject: bar
after changeObject: foo

before changeMember: foo
in changeMember: bar
after changeMember: bar
16
задан Maksim Vi. 17 November 2010 в 00:38
поделиться

3 ответа

var str = "some text{index:1}{id:2}{value:3}";
var index = str.match(/{index:(\d+)}/);
index = index && index[1]*1;
4
ответ дан Phrogz 21 August 2018 в 18:51
поделиться

JavaScript не поддерживает утверждения look-behind. Используйте этот шаблон вместо:

/{index:(\d+)}/g

Затем извлеките значение, зафиксированное в группе.

9
ответ дан cdhowie 21 August 2018 в 18:51
поделиться
  • 1
    он извлекает все это, в моем случае мне просто нужно целое число. – Maksim Vi. 17 November 2010 в 00:54
  • 2
    @negative: Обратите внимание на круглые скобки вокруг \d+; целое число фиксируется в группе # 1. – Alan Moore 17 November 2010 в 01:37
  • 3
    @Alan Moore, возможно, я делаю что-то неправильно, но "some text{index:1}{id:2}{value:3}".match(/{index:(\d+)}/g)[0] возвращает {index:1} И "some text{index:1}{id:2}{value:3}".match(/{index:(\d+)}/g)[1] возвращает «undefined». – Maksim Vi. 17 November 2010 в 01:56

(?<= ) - это положительный lookbehind. JavaScript-код RegEx не поддерживает lookbehind (но он поддерживает lookaheads).

41
ответ дан Yves M. 21 August 2018 в 18:51
поделиться
Другие вопросы по тегам:

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