Я пытаюсь получить последнюю строку (с правой стороны) ячеек в столбце, но не могу понять.

У меня есть этот код, который будет получать первые три цифры с левой стороны, но да, это не сработает.

var first_3_digs = values.filter(r => {
                                                                                    if(r.toString().includes('_')){return r;}
                                                                                }).map(r=> r.toString().split('_')[0]);

enter image description here

Например, если я хочу в качестве ввода CS_1 * 44u, я хочу, чтобы вывод u. То же самое для мл, л и т.д.

Если вам нужна дополнительная информация, дайте мне знать.

Большое спасибо за помощь.

1
Omar 4 Фев 2022 в 15:38
1
Когда используется ваш образец входной ситуации, можете ли вы предоставить образцы выходных значений, которые вы ожидаете?
 – 
Tanaike
4 Фев 2022 в 15:39
1
Предоставьте образец ввода и ожидаемый вывод в виде текста. Предоставьте свою попытку получить решение.
 – 
TheMaster
4 Фев 2022 в 15:50
Извините за поздний ответ
 – 
Omar
4 Фев 2022 в 15:56
1
Спасибо за ответ и добавление дополнительной информации. Теперь заметил, что ответ уже опубликован. В этом случае я хотел бы уважать существующий ответ.
 – 
Tanaike
4 Фев 2022 в 16:24
1
Почему вы думаете, что ответ не работает? Кажется, он выполняет то, о чем вы просите.
 – 
Iamblichus
4 Фев 2022 в 16:38

2 ответа

Лучший ответ

Пример, как получить «единицы» из нескольких ячеек:

const unit = x => /[\d]+[\D]+/.test(x) ? x.match(/[A-z]+$/)[0] : '';

var texts = ['CS_1*44u', 'Case', '72x64ml', '11x37kg', '123'];

texts.forEach(x => console.log(unit(x))); // --> 'u', '', 'ml', 'kg', ''

Пример, как получить «единицу» из одной ячейки:

const unit = x => /[\d]+[\D]+/.test(x) ? x.match(/[A-z]+$/)[0] : '';

var cell_value = 'CS_1*44u';

console.log(unit(cell_value)); // --> 'u'

Если вам нужно получить массив «единиц» из другого массива ячеек, вы можете отобразить функцию следующим образом:

const unit = x => /[\d]+[\D]+/.test(x) ? x.match(/[A-z]+$/)[0] : '';

var cells = ['CS_1*44u', 'Case', '72x64ml', '11x37kg', '123'];

var units = cells.map(x => unit(x)); // <---- here

console.log(units); // --> ['u', '', 'ml', 'kg', '']
1
Yuri Khristich 4 Фев 2022 в 16:58
1
В этом случае мне нужно было бы просмотреть все ячейки и записать их внутри текстов массива, чтобы он работал вместо отображения ячеек в столбце и получения только строковой части (до индекса) из ячейки. Как вы думаете, вы можете написать код, который будет работать таким образом?
 – 
Omar
4 Фев 2022 в 16:56
1
Я добавил пример, как вы можете получить массив единиц из массива ячеек.
 – 
Yuri Khristich
4 Фев 2022 в 16:59
1
Спасибо!...............
 – 
Omar
4 Фев 2022 в 17:01

Поскольку вы пометили формулы для возможного решения, я предложу следующую формулу REGEXEXTRACT:

=REGEXEXTRACT(K1,"[^(\d+(\.\d+)?)(?!.*\d+(\.\d+)?)]*$")

Объяснение:

ПОСЛЕ последнего появления «а»:

[^a]*$

ПОСЛЕДНЯЯ цифра (с десятичной запятой или без):

(\d+(\.\d+)?)(?!.*\d+(\.\d+)?)

enter image description here

[РЕДАКТИРОВАТЬ]

Где \d означает число, вот (более короткая) альтернатива, которая также протестирована как работающая с тем же набором данных:

=REGEXEXTRACT(K1,"[^\d]*$")
1
Mr Shane 4 Фев 2022 в 18:26