Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.03.2022, 17:02
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Извлечение буквы и всех последующих цифр с префиксом
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, 21.03.2022 в 17:19.
Ответить с цитированием
  #2 (permalink)  
Старый 21.03.2022, 18:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

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>
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2022, 20:30
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

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

Последний раз редактировалось Teamur, 21.03.2022 в 20:58.
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2022, 23:31
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 501

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск