Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.04.2022, 12:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Как сделать в один прием
Пытаюсь поделить текст на нужные мне элементы
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('*'))

Но нужное мне деление получается "в два приема". Замена на * и потом разбиение на массив.
Как бы поменять регулярку чтобы она сразу делила текст на нужные мне элементы?
Ответить с цитированием
  #2 (permalink)  
Старый 18.04.2022, 13:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

ksa,

val.match(/([^\n]+\n)+/mg)
Ответить с цитированием
  #3 (permalink)  
Старый 18.04.2022, 14:13
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от рони
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))
Ответить с цитированием
  #4 (permalink)  
Старый 18.04.2022, 14:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

И переводы строк остаются в конце элементов...
0: "[]Заголовок\n"
1: "    \n\t\n"
2: "Некий текст описывающий товар.\nПродолжение описания на другой строке.\n"
3: "[t]Название; Значение\nЖиры;  10\nБелки;20\n"
4: "[]Другой заголовок\n"
5: "Простой текст для рассказа о товаре\n"
Ответить с цитированием
  #5 (permalink)  
Старый 18.04.2022, 14:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

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

Последний перевод строки не считается. Его в данных не будет.
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2022, 14:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от ksa
Но все равно второй элемент получается лишний.
что это?
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2022, 15:00
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

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

    
	

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




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

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

Простой текст для рассказа о товаре
`
const re = /\n\s*\n/
console.log(JSON.stringify(val))
console.log(val.split(re))
Ответить с цитированием
  #8 (permalink)  
Старый 18.04.2022, 15:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от рони
что это?
Я вставил твой пример и запустил... Получил вот такое.
https://javascript.ru/forum/misc/839...tml#post544762
Ответить с цитированием
  #9 (permalink)  
Старый 18.04.2022, 15:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от ksa
Получил вот такое.
какой браузер?
Ответить с цитированием
  #10 (permalink)  
Старый 18.04.2022, 15:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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 */
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax. Как сделать загрузку изображений, отображение, удаление как на Авито wowtschuk AJAX и COMET 1 07.03.2017 01:34
Акардион меню из чекбоксов и списка, как сделать подсветку текущего элемента OliLoi jQuery 0 08.11.2016 08:15
как сделать чтобы в popup окне показывалось картинка? sarik Общие вопросы Javascript 31 15.03.2013 13:12
Как сделать: если один инпут заполнен, то в другой вводить нельзя? Fenec Events/DOM/Window 4 12.11.2010 19:32
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24