Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать в один прием (https://javascript.ru/forum/misc/83906-kak-sdelat-v-odin-priem.html)

ksa 18.04.2022 12:45

Как сделать в один прием
 
Пытаюсь поделить текст на нужные мне элементы
const val = `[]Заголовок
 
    
    
 
Некий текст описывающий товар.
Продолжение описания на другой строке.
 
 
 
 
[t]Название; Значение
Жиры;  10
Белки;20
 
[]Другой заголовок
 
Простой текст для рассказа о товаре
`
const re = /(\n\s*\n)+/g
console.log(JSON.stringify(val))
const str = val.replace(re, '*')
console.log(JSON.stringify(str))
console.log('Есть лишние элементы', val.split(re))
console.log('Так как нужно', str.split('*'))

Но нужное мне деление получается "в два приема". Замена на * и потом разбиение на массив.
Как бы поменять регулярку чтобы она сразу делила текст на нужные мне элементы?

рони 18.04.2022 13:22

ksa,
:-?
val.match(/([^\n]+\n)+/mg)

ksa 18.04.2022 14:13

Цитата:

Сообщение от рони
val.match(/([^\n]+\n)+/mg)

Лучше чем у меня... Но все равно второй элемент получается лишний. :cray:
const val = `[]Заголовок

    
	

Некий текст описывающий товар.
Продолжение описания на другой строке.




[t]Название; Значение
Жиры;  10
Белки;20

[]Другой заголовок

Простой текст для рассказа о товаре
`
const re = /(\n\s*\n)+/g
console.log(JSON.stringify(val))
const str = val.replace(re, '*')
console.log(JSON.stringify(str))
console.log(val.split(re))
console.log(str.split('*'))
console.log(val.match(/([^\n]+\n)+/mg))

ksa 18.04.2022 14:15

И переводы строк остаются в конце элементов... :cray:
0: "[]Заголовок\n"
1: "    \n\t\n"
2: "Некий текст описывающий товар.\nПродолжение описания на другой строке.\n"
3: "[t]Название; Значение\nЖиры;  10\nБелки;20\n"
4: "[]Другой заголовок\n"
5: "Простой текст для рассказа о товаре\n"

ksa 18.04.2022 14:16

В идеале вот такое нужно получить
0: "[]Заголовок"
1: "Некий текст описывающий товар.\nПродолжение описания на другой строке."
2: "[t]Название; Значение\nЖиры;  10\nБелки;20"
3: "[]Другой заголовок"
4: "Простой текст для рассказа о товаре\n"

Последний перевод строки не считается. Его в данных не будет.

рони 18.04.2022 14:55

Цитата:

Сообщение от ksa
Но все равно второй элемент получается лишний.

что это?

ksa 18.04.2022 15:00

Видно split() имеет свои виды на паттерн...
const val = `[]Заголовок

    
	

Некий текст описывающий товар.
 Продолжение описания на другой строке.




[t]Название; Значение
Жиры;  10
Белки;20

[]Другой заголовок

Простой текст для рассказа о товаре
`
const re = /\n\s*\n/
console.log(JSON.stringify(val))
console.log(val.split(re))

ksa 18.04.2022 15:01

Цитата:

Сообщение от рони
что это?

Я вставил твой пример и запустил... Получил вот такое.
https://javascript.ru/forum/misc/839...tml#post544762

рони 18.04.2022 15:02

Цитата:

Сообщение от ksa
Получил вот такое.

какой браузер?

рони 18.04.2022 15:30

ksa,
const val = `[]Заголовок




Некий текст описывающий товар.
Продолжение описания на другой строке.




[t]Название; Значение
Жиры;  10
Белки;20

[]Другой заголовок

Простой текст для рассказа о товаре
`
let x = val.match(/(([^\n]+\n)+(?:[^\n]+))|([^\n]+(?=\n))/mg);

console.log(x)
/* 0: "[]Заголовок"
​
1: "Некий текст описывающий товар.\nПродолжение описания на другой строке."
​
2: "[t]Название; Значение\nЖиры;  10\nБелки;20"
​
3: "[]Другой заголовок"
​
4: "Простой текст для рассказа о товаре"
​
length: 5 */


Часовой пояс GMT +3, время: 13:49.