Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 24
1

Разбиение строки на две по первому вхождению делителя

07.03.2017, 12:30. Просмотров 1020. Ответов 6
Метки нет (Все метки)

Добрый день. Имеется строки:
1) "Состав: глина, песок, красители: красный синий"
2) "Reg-он страны"
3) "Страна : "

нужно разбить по первому вхождению делителя ": " (делитель выбрасывается).
Нужен результат:
1) ["Состав", "глина, песок, красители: красный синий"]
2) ["Reg-он страны"]
3) ["Страна"]

Написал такое: "([\wа-яА-Я-.,\s]+)(?:\s?:\s?)?(.+)?" но выводит все полностью

Добавлено через 18 минут
Другими словами - ищем разделитель ": " и разбиваем строку на две части (набор символов может быть любой, в любой кодировке). Во второй части может присутствовать разделитель, но по нем не нужно делить строку.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2017, 12:30
Ответы с готовыми решениями:

Определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’
определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’ ( либо сколько всего...

Определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’
Помогите решить задачку. вроде проще некуда, а голова совсем не варит( определить, сколько...

Из столбца с текстом выбрать уникальные данные по первому вхождению
Здравствуйте, появилась идейка немного оптимизировать таблицу, и чуток собирать данные быстрее,...

Каждую из цифр, предшествующую первому вхождению символа +, заменить символом -
Дан текст. Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр,...

6
Ренегат
Эксперт HTML/CSS
1733 / 1078 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
07.03.2017, 13:00 2
Javascript
1
/^([^:]+): (.+)$/
0
the hardway first
Эксперт JS
1947 / 1454 / 743
Регистрация: 05.06.2015
Сообщений: 3,054
07.03.2017, 13:44 3
Добавлено через 18 минут
Javascript
1
2
3
4
5
6
7
8
9
10
var splitter = function (str) {
  return str
    .match(/^([^:]+)\s*:?\s*(.+)?$/)
    .slice(1)
    .reduce(function (acc, part) {
      part = part ? part.trim() : '';
      if(part.length > 0) acc.push(part);
      return acc;
    }, []);
}
Кликните здесь для просмотра всего текста
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
describe('Splitter splits string to array by ":" character.', function () {
  describe('When string contains ":"', function () {
    it('returns array', function () {
      var str = 'Состав: глина, песок, красители красный синий';
      var expected = [
        'Состав',
        'глина, песок, красители красный синий'
      ];
      expect(splitter(str)).toEqual(expected);
    });
  });
 
  describe('When string contains more than one ":" char', function () {
    it('splits string by first ":"', function () {
      var str = 'Состав: глина, песок, красители: красный синий';
      var expected = [
        'Состав',
        'глина, песок, красители: красный синий'
      ];
      expect(splitter(str)).toEqual(expected);
    });
  });
 
  describe('When second part of the string is spaces', function () {
    it('returns one element array', function () {
      var str = 'Страна : ';
      expect(splitter(str)).toEqual(['Страна']);
    });
  });
 
  describe('When string does not contain ":"', function () {
    it('returns one element array', function () {
      var str = 'Reg-он страны';
      expect(splitter(str)).toEqual(['Reg-он страны']);
    });
  });
});
0
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 24
07.03.2017, 14:43  [ТС] 4
Цитата Сообщение от BANO Посмотреть сообщение
Javascript
1
/^([^:]+): (.+)$/
вернуло массив с тремя значениями:
Javascript
1
2
3
4
5
6
7
Array[3]
0: "Состав: глина, песок, красители: красный синий"
1: "Состав"
2: "глина, песок, красители: красный синий"
index: 0
input: "Состав: глина, песок, красители: красный синий"
length:3
Чего оно впихнуло в 0 элемент исходный текст?
0
Ренегат
Эксперт HTML/CSS
1733 / 1078 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
07.03.2017, 18:57 5
Цитата Сообщение от Sans84 Посмотреть сообщение
Чего оно впихнуло в 0 элемент исходный текст?
Ибо match действует именно так, как он вам и показал. Нулевой элемент, как и первый аргумент replace, - исходная строка, к которой подошло всё выражение.
0
983 / 617 / 362
Регистрация: 07.11.2015
Сообщений: 984
08.03.2017, 00:02 6
Можно задать лимит вторым параметром split
Javascript
1
result = str.split(/:\s*/, 2);
0
Ренегат
Эксперт HTML/CSS
1733 / 1078 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
08.03.2017, 12:32 7
Emilien, проблема вот в чём...
Javascript
1
2
"Состав: глина, песок, красители: красный синий: красный и синий уже не будут в результате:а этот текст:и:подавно".split(/:\s*/, 2); 
// -> ["Состав", "глина, песок, красители"] целый кусок строки пропустится
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2017, 12:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти слово, предшествующее первому вхождению w в s1 (Составить блок-схему)
Даны две строки s1 и s2. Пусть w – первое из слов строки s1, которое есть и в строке s2. Найти...

Каждую из малых латинских букв, предшествующих первому вхождению символа *, заменить на цифру 3
Если в тексте нет символа *, то оставить этот текст без изменения, иначе каждую из малых латинских...

Каждую из малых латинских букв, предшествующих первому вхождению символа *, заменить на цифру 3
Если в тексте нет символа *, то оставить текст без изменений. Иначе каждую из малых латинских букв,...

В тексте каждую из малых латинских букв, предшествующих первому вхождению символа *, заменить на цифру
Дан текст. Если в тексте нет символа *, то оставить этот текст без изменения, иначе каждую из малых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.