Извлечение буквы и всех последующих цифр с префиксом
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 ] |
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> |
рони,
спасибо! Я пробовал сделать с одним регулярным выражением как в исходном коде, но не осилил. Пробовал использовать новые фишки регулярных выражений. Почти удалось, но приходиться повторять '_\d+'. Опережающая проверка всё делает как надо и, заключая в скобки (_\d+), удаётся возвращать числа. Очень хотелось бы решения с одним регулярным выражением. И, вообще, мне иногда кажется (не проверял), что простым for-ом можно быстрее получить что нужно, чем извращаться с регулярными выражениями. Но это я попробую, когда всё надоест )) |
Teamur,
одной регуляркой у вас не получится получить больше одного массива. Разве что таким вот хаком как у вас, с множеством повторений в скобках. А вообще тут два split напрашивается - один по запятой, и второй в цикле по подчёркиванию. |
Часовой пояс GMT +3, время: 04:27. |