Member 12753498 Ответов: 1

Проблема сопоставления строк Javascript


Моя функция должна найти, сколько времени моя строка повторяется внутри строки. Он проходит все тестовые вызовы, кроме последнего. В строку “ааа” результат должен быть 2. Нашли струны должны быть “АА” и “АА”, но я только обнаруживать первый “АА”.

Что я уже пробовал:

Я думаю, что это что-то о позиции индекса, но я не могу понять этого.

Что я могу сделать, чтобы исправить это?

Мой код до сих пор:

function dscount(args){
 var str = args[0];
 var s ='' ;
 for(i=1; i<args.length; i++){
     s+=args[i];
 }
 var search = new RegExp(s, 'gi');
 var count = (str.match(search) || []).length;
 console.log(count);
 return count;
}
try {
    test(dscount, ['ab___ab__', 'a', 'b'], 2);
    test(dscount, ['___cd____', 'c', 'd'], 1);
    test(dscount, ['de_______', 'd', 'e'], 1);
    test(dscount, ['12_12__12', '1', '2'], 3);
    test(dscount, ['_ba______', 'a', 'b'], 0);
    test(dscount, ['_a__b____', 'a', 'b'], 0);
    test(dscount, ['-ab-?b-ab', 'a', 'b'], 2);
    test(dscount, ['aAa', 'a', 'a'], 2);

    console.info("Congratulations! All tests success passed.");
} catch(e) {
    console.error(e);
}

function test(call, args, count) {
    let r = (dscount(args) === count);
    console.assert(r, `Finded items count: ${count}`);
    if (!r) throw "Test failed!";
}

1 Ответов

Рейтинг:
0

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

Совет: возьмите лист бумаги и попробуйте сделать это вручную, ваша программа должна использовать ту же процедуру.

вы должны попробовать:

test(dscount, ['aAa', 'a'], 2);

или
test(dscount, ['aaAaa', 'a', 'a'], 2);


[Обновление]
Цитата:
Так, например, в строке "aAa". match (”a“) он в основном перемещает мой индекс на 1, так как строка”a“. length =1; и когда я пытаюсь сопоставить его со строкой” aa", он перемещает мой индекс на 2.
Поэтому мои результаты отсутствуют.

Поняли ли вы, что вы пытаетесь сопоставить "АА" в "ААА", что не дает никакого соответствия?


Member 12753498

Спасибо за ответ, я смотрю отладчик.
Но, как я понимаю, функция. match () просто берет мою строку и сопоставляет ее с помощью длины.
Так, например, в строке "aAa". match (”a“) он в основном перемещает мой индекс на 1, так как строка”a“. length =1; и когда я пытаюсь сопоставить его со строкой” aa", он перемещает мой индекс на 2.
Поэтому мои результаты отсутствуют.
Как я уже говорил, Я думаю, что проблема заключается в индексной позиции. И все же я не знаю, как это исправить.
И можно ли заставить его работать с .match (), или я должен попытаться переписать функцию с помощью какого-то другого метода?