Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Извлечение буквы и всех последующих цифр с префиксом (https://javascript.ru/forum/misc/83810-izvlechenie-bukvy-i-vsekh-posleduyushhikh-cifr-s-prefiksom.html)

Teamur 21.03.2022 17:02

Извлечение буквы и всех последующих цифр с префиксом
 
let s='a_4_8_15_16 , b_23_42'; // и т.д.
for(s of s.matchAll(/[a-z](?=(_\d+)(_\d+)(_\d+))/g)){
  console.log(s)
};

Как избавиться от повторения '_\d+' ?

Количество чисел с префиксом '_' может быть сколь угодно.

На выдаче должно быть (по итерациям):
1) [ a , _4 , _8 , _15 , _16 ]
2) [ b , _23 , _42 ]

рони 21.03.2022 18:00

Teamur,
<div id="out"></div>
<script>
let s='a_4_8_15_16 , b_23_42'; // и т.д.
for(s of s.matchAll(/[^,\s]+/g)){
s = s[0].match(/[a-z]|_\d+/g)
out.append(JSON.stringify(s))
};

</script>

Teamur 21.03.2022 20:30

рони,
спасибо! Я пробовал сделать с одним регулярным выражением как в исходном коде, но не осилил. Пробовал использовать новые фишки регулярных выражений. Почти удалось, но приходиться повторять '_\d+'.
Опережающая проверка всё делает как надо и, заключая в скобки (_\d+), удаётся возвращать числа. Очень хотелось бы решения с одним регулярным выражением. И, вообще, мне иногда кажется (не проверял), что простым for-ом можно быстрее получить что нужно, чем извращаться с регулярными выражениями. Но это я попробую, когда всё надоест ))

Белый шум 21.03.2022 23:31

Teamur,
одной регуляркой у вас не получится получить больше одного массива. Разве что таким вот хаком как у вас, с множеством повторений в скобках. А вообще тут два split напрашивается - один по запятой, и второй в цикле по подчёркиванию.


Часовой пояс GMT +3, время: 04:27.