Javascript регулярное выражение, заменить все символы, кроме чисел

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

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

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

6 ответов

Решение

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

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

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

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

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

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

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

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

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

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

      "string@! 134".replace(/[^a-z^0-9]+/g, " ");

это вернет "строку 134"

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

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

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

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

Пример:

"123.456px".extractNumber(); // 123.456
Другие вопросы по тегам