Вы можете рассмотреть двухэтапное решение: сопоставить подстроки после разделителя, а затем разделить:

аюсь разбить строку:

Chan 0: 2.50 0.12 13.92 83.46,Chan 1: 2.58 85.92 2.47 9.03,Chan 2: 5.00 85.0 33.33 6.64,Chan 3: 0.00 0.00 14.41 85.59

Я пытаюсь получить только цифры. Я попытался использовать следующее регулярное выражение:

/(\bChan\s[0-9]\b|\b,Chan\s[0-9]\b):\s|\s/

в соответствии с regextester.com я должен ожидать 16 строк, но я получаю 41, когда я пытаюсь напечатать длину переменной, которая содержит разделенную строку.

Мой код:

var x = values.value;
var v = x.split(/(\bChan\s[0-9]\b|\b,Chan\s[0-9]\b):\s|\s+/);
console.log(v.length);

Дополнительный вопрос: я пытался опустить|\s в конце разделить строку наchan # строка. Это делит его, я получаю длину 9, когда я пытаюсь распечатать их, я все еще могу распечатать разделитель, который я использовал,Chan #: Я думал, что возвращаемое значение split это просто значения между разделителем, который я использовал, а не сам разделитель?

 nanj09 окт. 2017 г., 09:31
@ WiktorStribiżew о да. Вопрос отредактирован
 T.J. Crowder09 окт. 2017 г., 09:31
Я исправил форматирование для вас дважды.
 Wiktor Stribiżew09 окт. 2017 г., 09:29
Пожалуйста, добавьте код, который вы используете. Я полагаю.split(), правильно?
 T.J. Crowder09 окт. 2017 г., 09:31
Когда вы задавали свой вопрос, был большой оранжевыйКак отформатировать поле справа от текстовой области с полезной информацией в нем. Была также целая панель инструментов для форматирования. И[?] кнопка, дающая помощь в форматировании.А также область предварительного просмотра, расположенная между текстовой областью и кнопкой «Опубликовать свой вопрос» (чтобы вам пришлось прокручивать ее, чтобы найти кнопку, чтобы вы могли на нее посмотреть), показывающая, как будет выглядеть ваше сообщение при публикации. Оформление вашего поста и демонстрация того, что вы потратили на это время, повышают ваши шансы получить хорошие ответы.
 RomanPerekhrest09 окт. 2017 г., 09:31
что это значит16 строка?

Ответы на вопрос(2)

(\bChan\s[0-9]\b|\b,Chan\s[0-9]\b):\s|\s регулярное выражение содержит группу захвата, иString.split() всегда помещает захваченную подстроку в результирующий массив. Кроме того, шаблон совпадает в начале строки, и, таким образом, пустой элемент помещается в начало результирующего массива.

Есть несколько способов решить проблему, и это зависит от того, какой вклад может быть. Если вы знаете, что всегда естьChan+ Пространства + цифры +: между числами с плавающей точкой, которые всегда в одном и том же формате, вы можете использовать предложение Нины,string.match(/\d+\.\d+/g) так как это самое простое.

Вы также можете исправить свой подход, избавившись от группы захвата и удалив пустые элементы:

var x = "Chan 0: 2.50 0.12 13.92 83.46,Chan 1: 2.58 85.92 2.47 9.03,Chan 2: 5.00 85.0 33.33 6.64,Chan 3: 0.00 0.00 14.41 85.59";
var v = x.split(/(?:\b,?Chan\s+\d+:)?\s+/).filter(Boolean);
console.log(v.length);
console.log(v);

Если вам нужен способ захватывать только непробельные фрагменты послеChan + цифры +:Вы можете рассмотреть двухэтапное решение: сопоставить подстроки после разделителя, а затем разделить:

var x = "Chan 0: 2.50 0.12 13.92 83.46,Chan 1: 2.58 85.92 2.47 9.03,Chan 2: 5.00 85.0 33.33 6.64,Chan 3: 0.00 0.00 14.41 85.59";
var v=[],m;
var rx = /\bChan\s+\d+:\s+([\s\d.]+)/g;
while(m=rx.exec(x)) {
  m[1].split(/\s+/).map(function(c) {return v.push(c);});
}
console.log(v.length);
console.log(v);

Решение Вопроса

var string = "Chan 0: 2.50 0.12 13.92 83.46,Chan 1: 2.58 85.92 2.47 9.03,Chan 2: 5.00 85.0 33.33 6.64,Chan 3: 0.00 0.00 14.41 85.59",
    values = string.match(/\d+\.\d+/g); 

console.log(values.length);
console.log(values);

Ваш ответ на вопрос