2012-02-16 2 views

ответ

30

Вам нужен модификатор /g заменить каждое появления:

"a100.dfwe".replace(/[^0-9]+/g, ""); 

Я также удалил избыточную i модификатора и Подвыражение неиспользованного отлова брекеты для вас. Как уже отмечалось, вы можете также использовать \D сократить его еще больше:

"a100.dfwe".replace(/\D+/g, ""); 
+0

спасибо, и что именно делает "+" означает? –

+0

@PrakashRaman: это означает * соответствие одному или нескольким из предыдущих символов *. Это не нужно, но это немного увеличит производительность регулярного выражения, уменьшив требуемое количество замещений. –

+0

(Технически этот ответ отвечает на вопрос, но терпит неудачу при поплавках) "123.456px" .replace (/ \ D +/g, ""); -> 123456 –

17

\D означает «не цифры»:

"a100.dfwe".replace(/\D/g, "") 
+0

Самая компактная форма. – Oybek

1

Это не работает, потому что класс символов [^0-9] (= ничего, кроме цифр) с модификатором повторения + будет соответствовать только одной последовательности нечисловых символов, таких как «aaa».

Для ваших целей, используйте модификатор /g как другие предлагают (заменить все матчи по всему миру), и вы также можете использовать заранее определенный класс символов \D (= не цифра) вместо [^0-9], что привело бы к более кратким регулярным выражением /\D+/.

+0

, чтобы понять это лучше. не должен «a» и «.dfwe» попадать под + группу, потому что это 1 и более. –

+3

'\ D +' говорит «искать один или несколько нецифровых чисел», тогда как '(\ D) +' ищет одно или несколько повторений (той же) нецифровой, что не то, что вы хотите. Теперь, независимо от того, выполняете ли вы '/ \ D/g' (заменяете каждую отдельную цифру) или'/\ D +/g' (заменить каждую последовательность цифр), не имеет значения, кроме, возможно, с точки зрения производительности , который не будет заметен, если вы не обработаете десятки тысяч строк. – fanaugen

+0

ах большое спасибо. Это прекрасно объясняет мне. Благодаря ! –

2

насчет отрицательных чисел:

Используя пример Andy E работает, если у вас есть отрицательное число. Затем он удаляет символ «-», оставляя при этом всегда положительное число (что может быть хорошо). Однако, если вы хотите сохранить номер меньше, чем 0, я хотел бы предложить следующее:

"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100 

Но будьте осторожны, потому что это оставит все - символы, давая вам ошибку, если ваш текст выглядит как «-а-«» 100.dfwe "

+0

Он действительно не говорит о цифрах, просто группы цифр. Во всяком случае, ваше регулярное выражение все еще совпадает с '-', потому что оно не находится в начале строки. –

0

Основано на ответе @ user3324764. Сделайте функцию прототипа и преобразуйте число в число.

String.prototype.extractNumber = function() 
{ 
    return Number(this.replace(/(?!-)[^0-9.]/g, "")); 
}; 

Пример:

"123.456px".extractNumber(); // 123.456