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