Как сделать в один прием
Пытаюсь поделить текст на нужные мне элементы
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('*')) Но нужное мне деление получается "в два приема". Замена на * и потом разбиение на массив. Как бы поменять регулярку чтобы она сразу делила текст на нужные мне элементы? |
ksa,
:-? val.match(/([^\n]+\n)+/mg) |
Цитата:
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)) |
И переводы строк остаются в конце элементов... :cray:
0: "[]Заголовок\n" 1: " \n\t\n" 2: "Некий текст описывающий товар.\nПродолжение описания на другой строке.\n" 3: "[t]Название; Значение\nЖиры; 10\nБелки;20\n" 4: "[]Другой заголовок\n" 5: "Простой текст для рассказа о товаре\n" |
В идеале вот такое нужно получить
0: "[]Заголовок" 1: "Некий текст описывающий товар.\nПродолжение описания на другой строке." 2: "[t]Название; Значение\nЖиры; 10\nБелки;20" 3: "[]Другой заголовок" 4: "Простой текст для рассказа о товаре\n" Последний перевод строки не считается. Его в данных не будет. |
Цитата:
|
Видно split() имеет свои виды на паттерн...
const val = `[]Заголовок Некий текст описывающий товар. Продолжение описания на другой строке. [t]Название; Значение Жиры; 10 Белки;20 []Другой заголовок Простой текст для рассказа о товаре ` const re = /\n\s*\n/ console.log(JSON.stringify(val)) console.log(val.split(re)) |
Цитата:
https://javascript.ru/forum/misc/839...tml#post544762 |
Цитата:
|
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 */ |
ksa, а почему не указать регулярку прямо в split ?
var 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.split(/\n\s*\n/)) ADD: а, вижу что пытался, но как-то странно... |
Цитата:
|
Цитата:
А тут replace() заменяет как надо, а split() давал странный для меня результат. |
ksa,
split() ищет, а не заменяет, поэтому флаг 'g' для него как-то вообще не к месту. Странно что вообще какой-то результат выдал. Ну и '+' в конце регулярки не имеет смысла в обоих случаях, т.к. '*' сам по себе жадный: https://learn.javascript.ru/regexp-greedy-and-lazy |
Это все уже учли... :)
|
Часовой пояс GMT +3, время: 19:59. |