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