Loading...
AnnaProgrammer avatar AnnaProgrammer 74 Точки

Помощ със задача **Secret Data (Strings and RegExp)

Здравейте,

Май въпроса ми е елементарен и съм доста уморена, но просто не мога да разбера тази функция, с която задачата минава със 100/100:

sentence = sentence.replace(regex, function (match) {
    return "|".repeat(match.length);
})

Може ли някакво обяснение? Разбирам какво прави, но не как го прави, т.е. как знае, че параметъра е всъщност самото съвпадение?

И защо това дава само 27 точки:

let match;
do {
    match = regex.exec(sentence);
    if (match){
        sentence = sentence.replace(regex, "|".repeat(match[0].length))
    }
} while(match);

Пълно решение: https://pastebin.com/Rrs4VNyg

Тагове:
1
Module: JS Advanced 01/02/2018 23:32:17
Nikola_Andreev avatar Nikola_Andreev 671 Точки
Best Answer

Привет.
Проблемът е че правиш replace директно със regex а трябва да го правиш със string. Ако си спомняш на лекцията говорихме че когато заместваме с регекс се заменят всички повторения в стринга, а когато го правим с стринг се заменя само първото повторение. В твоя случай ти заменяш абсолютно всички повторения в стринга с брой прави черти генериран от дължината само на първото съвпадение.

За пример ще разгледаме този стринг "+231_23 _2".  Очакваният резултат тук е  "+231||| ||", в твоят случай обаче се добавя още една черта накрая "+231||| |||". Ти правиш това:

sentence = sentence.replace(regex, "|".repeat(match[0].length))

В изречечението имаме 2 съвпадения, _23 и _2. Ти обаче заменяш и 2-те съвпадения с брой черти съответстващи на дължината само на 1 вото и никъде не взимаш в предвид дължината на второто съвпадение. Затова накрая получаваш 2 пъти по ||| , вместо ||| || . Ако заменяш по стринг а не по регекс ще се получи.

sentence = sentence.replace(match[0], "|".repeat(match[0].length))

Така вече заменяш само първото съвпадение с неговата бройка, останалите не се заменят и ще се заменят на следващото завъртане на цикъла. Тогава те ще са match[0] и тяхната дължина ще се вземе в предвид.

2
AnnaProgrammer avatar AnnaProgrammer 74 Точки

Ох да, глупости съм писала laugh Благодаря Ви!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.