1

Тема: Пошук та заміна "неповністю ідентичних" текстів

Слава Іісусу!

Треба пробігтись по тексту та замінити одні речення іншими. Проблема тільки в тому, що перші речення можуть містити символ нового рядку в собі, іноді їх може бути декілька.
Наприклад:

Ти знаєш, що ти  людина?\n
Ти знаєш про це чи ні?\n
\n
\n
Усмішка твоя  єдина, Мука твоя  єдина,\n
Очі твої  одні.

треба замінити на

Ти знаєш, що ти  людина? Ти знаєш про це чи ні? Усмішка твоя  єдина, Мука твоя  єдина, Очі твої  одні.

Це я лише приклад навів, тому просто видаляти всі символи рядку не вийде. Другий рядок від початку дається в такій формі, і тільки він використовується для пошуку в тексті того, що треба замінити.

Чи можна то зробити регулярками, чи то будуть дуже складні регулярки, і простіше написати свою функцію, котра буде перевіряти символ за символом, і як тільки зустріне символи нового рядка - проігнорує їх, та перевірить, чи те, що йде після них, збігається з тим, що йде далі в рядку, на котрий треба замінити?

2

Re: Пошук та заміна "неповністю ідентичних" текстів

наробив поки таке, перевірив також з html'івським новим рядком, ніби робе

Прихований текст
const text = `Ти знаєш, що ти – людина?

Ти знаєш про це чи ні?
Усмішка твоя – єдина,<br>


Мука твоя – єдина,
Очі твої – одні.`;

const newText = `Ти знаєш, що ти – людина?Ти знаєш про це чи ні?Усмішка твоя – єдина,Мука твоя – єдина,Очі твої – одні.`;

function checkBr(i, text) {
    let start, end = 0;
    switch (text[i]) {
        case '<':
            start = i;
            end = i + 4;
            break;
        case 'b':
            start = i - 1;
            end = i + 3;
            break;
        case 'r':
            start = i - 2;
            end = i + 2;
            break;
        case '>':
            start = i - 3;
            end = i + 1;
            break;
    }
    if (start !== 0 && end !== 0 && text.substring(start, end) === '<br>') {
        console.log('true');
        return true
    };
    return false;
}

function check(text, replace) {
    let replaceStart = 0;
    let result = '';

    for (let i = 0; i < text.length; i++) {
        if (text[i] === replace[replaceStart]) {
            replaceStart++;
            result += text[i];
            if (replaceStart === replace.length - 1) break;
        } else if (replaceStart > 0) {
            if (text[i] === '\n' || checkBr(i, text)) {
                continue;
            } else
                break;
        }
    }

    console.log('result: ', result);
}

check(text, newText);

3

Re: Пошук та заміна "неповністю ідентичних" текстів

трішки оптимізував, шоб менше писати тре було

Прихований текст
const text = `Ти знаєш, що ти – людина?

Ти знаєш про це чи ні?
Усмішка твоя – єдина,<br>


Мука твоя – єдина,
Очі твої – одні.`;

const newText = `Ти знаєш, що ти – людина?Ти знаєш про це чи ні?Усмішка твоя – єдина,Мука твоя – єдина,Очі твої – одні.`;

function checkBr(i, text) {
    let start, end = 0;
    const shit = '<br>';
    const index = shit.indexOf(text[i]);
    if (index >= 0) {
        start = i - index;
        end = i + shit.length - index;
    }
    if (start !== 0 && end !== 0 && text.substring(start, end) === '<br>') {
        console.log('true');
        return true
    };
    return false;
}

function check(text, replace) {
    let replaceStart = 0;
    let result = '';

    for (let i = 0; i < text.length; i++) {
        if (text[i] === replace[replaceStart]) {
            replaceStart++;
            result += text[i];
            if (replaceStart === replace.length) break;
        } else if (replaceStart > 0) {
            if (text[i] === '\n' || checkBr(i, text)) {
                continue;
            } else
                break;
        }
    }

    console.log('result: ', result);
}

check(text, newText);

4 Востаннє редагувалося iovchynnikov (01.05.2021 10:25:50)

Re: Пошук та заміна "неповністю ідентичних" текстів

 /\n/g

https://regex101.com/r/RNiFcn/1

Згенерований regex101 JS код
const regex = /\n/g;
const str = `Ти знаєш, що ти – людина?
Ти знаєш про це чи ні?


Усмішка твоя – єдина, Мука твоя – єдина,
Очі твої – одні.`;
const subst = ` `;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

або мультиплатформенний варіант:

 /\r?\n|\r/g

https://stackoverflow.com/a/10805292