bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Регулярное выражение отбросить значения не являющиеся подстроками?

Здравствуйте. Подскажите пожалуйста. У меня в регулярном выражении ищутся 3 подстроки, и нужно все что не входит в них отбросить
`gd00,55dgfdg`.replace(/(\d+)\.|,(\d+)/, '$1.$2');
// Возвращает "gd00.55dgfdg"
// А нужно что бы было: "00.55"

А так же при как при отсутствии совпадения подстроки продолжать поиск
`gd0055dgfdg`.match(/(\d+)\.|,(\d+)/, '$1.$2'); \\ null
// А нужно что бы вернулся результат первой подстроки '0055' 

`0,0`.match(/(\d+)(\.|,)(\d+)/, '$1.$2'); \\0.0
`00`.match(/(\d+)(\.|,)(\d+)/, '$1.$2'); \\null


А также интересует например как при отсутствии разделителя
  • Вопрос задан
  • 321 просмотр
Пригласить эксперта
Ответы на вопрос 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
"a25,225a".replace(/.*?(\d+[.,]?\d*).*/, '$1').replace(',', '.')
Ответ написан
@rail01y
надеюсь я правильно понял, что вы хотите получить

'gd0055dgfdg'.replace(new RegExp(/[a-zA-Z]/,'ig'),'')
Ответ написан
Stalker_RED
@Stalker_RED
Набросал код, который соответствует всем вашим тестам кроме 0055 и 00.55. (будет 55 и 0.55, соответственно) Вам действительно нужны эти лидирующие нули?

https://jsfiddle.net/0L39k579/
Ответ написан
bogdan_uman
@bogdan_uman Автор вопроса
шлЫмазл неукЪ-поцЪ
Вот вроде что-то начало выходить, может поправите что не так и где можно что-то улучшить Задачу я чуток расширил, и теперь можно разрядность указывать при обрезке символов (собственно поэтому и пошел путем регулярных выражений)
[
  'gd00.55...dgfdg',
  'gd0055dgfdg',
  'a252.25a',
  'a25225a',
  'a252,25a',
  '252,25a',
  'a252,250',
  '-d--252,2534567',
  '',
  'aaa',
  '0',
].forEach( input => {
  // Добавлены слеши для экранирования, выражение - RegExp('...').toString()
  const scale = 1;
  const regExp = `(-?\\d+)([.,]${ scale ? '\\d{1,' + scale + '}' : '' })?`;
  const result = +( new RegExp(regExp).exec(input) || ['0'] )[0].replace(',', '.');
  console.log( '"%s" → [ %s ]', input, result );
});


"gd00.55...dgfdg" → [ 0.5 ]
"gd0055dgfdg" → [ 55 ]
"a252.25a" → [ 252.2 ]
"a25225a" → [ 25225 ]
"a252,25a" → [ 252.2 ]
"252,25a" → [ 252.2 ]
"a252,250" → [ 252.2 ]
"-d--252,2534567" → [ -252.2 ]
"" → [ 0 ]
"aaa" → [ 0 ]
"0" → [ 0 ]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы