2016-03-28 3 views
-1

Рассмотрим следующую строку:Изменить регулярное выражение, чтобы найти десятичные-Javascript

var string="0px 0px 4.5px"; 

Теперь, скажем, я хочу, чтобы извлечь номера из этой строки. Я буду использовать следующее регулярное выражение:

var numbers=string.match(/\d+/g); 

Но то, что я получаю:

["0","0","4"] 

Итак, вы видите, что 4,5 превратился в integer.So моего вопрос, как я могу изменить выше регулярное выражение чтобы получить плавающие числа из строки

+3

регулярное выражение? pfft ... '" 0px 0px 4.5px ".split (" ") .map (parseFloat)' – canon

+0

@canon: Не будет этого выплюнуть '[" 0px "," 0px "," 4.5px "]'. Разве он не разбивается на 'px'? P.S: Проверено. Это работает. –

+0

@noob Вот что возвращает 'split()' да. Но вызов 'map()' затем анализирует эти значения в поплавках. Попробуйте в консоли. – canon

ответ

0

Ваш ответ уже комментирован canon.

Но так как вы добавили regex тег здесь это решение.

Regex:/(?:\d+(?:\.\d+)?|\.\d+)/g

Флаги использовать:

  • g для глобального поиска.

Объяснение:

  • \d+ будет соответствовать целой части.

  • (?:\.\d+)? будет соответствовать десятичной части, которая не является обязательной.

  • \.\d+ для цифр только с десятичной запятой.

Regex101 Demo

+0

Это было, и это тоже неправильно :) – Pointy

+0

@Pointy: '*' позволит много десятичных частей. –

+1

хорошо мое предположение, что '4.px' является допустимым CSS не кажется истинным (хотя' 4. + 4' отлично подходит JavaScript). – Pointy

0

Это хороший один (?:\d+(?:\.\d*)?|\.\d+)

Разъяснения

(?: 
     \d+     # Digits 
     (?: \. \d*)?  # Optional dot (digits optional) 
    |     # or, 
     \. \d+    # Dot digits 
) 
+0

О да!чтобы разрешить только десятичную часть. Хорошо поймал. –

+0

Да, это была бы хорошая идея, если бы это было так, как я думал, это было всего лишь несколько мгновений назад, что действительный CSS может включать что-то вроде '5.px'. – Pointy

+1

Ну тогда '5.' соответствует. – sln

Смежные вопросы