Javascript regex, замените все символы, отличные от цифр

Я хотел бы заменить все символы, отличные от 0-9, в строке, используя Javascript.

Почему это регулярное выражение не работает?

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

Ответы

Ответ 1

Вам понадобится модификатор /g, чтобы заменить каждое событие:

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

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

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

Ответ 2

\D означает "не цифра":

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Пример:

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