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, "");
А как насчет отрицательных чисел:
Использование примера Энди Э работает, если у вас нет отрицательного числа. Затем он удаляет символ "-", оставляя вам всегда положительное число (что может быть в порядке). Однако, если вы хотите сохранить число меньше 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