Я хотел бы заменить все символы, отличные от 0-9, в строке, используя Javascript.Javascript regex, заменить все символы, отличные от цифр
Почему это регулярное выражение не работает?
"a100.dfwe".replace(/([^0-9])+/i, "")
Я хотел бы заменить все символы, отличные от 0-9, в строке, используя Javascript.Javascript regex, заменить все символы, отличные от цифр
Почему это регулярное выражение не работает?
"a100.dfwe".replace(/([^0-9])+/i, "")
Вам нужен модификатор /g
заменить каждое появления:
"a100.dfwe".replace(/[^0-9]+/g, "");
Я также удалил избыточную i
модификатора и Подвыражение неиспользованного отлова брекеты для вас. Как уже отмечалось, вы можете также использовать \D
сократить его еще больше:
"a100.dfwe".replace(/\D+/g, "");
Это не работает, потому что класс символов [^0-9]
(= ничего, кроме цифр) с модификатором повторения +
будет соответствовать только одной последовательности нечисловых символов, таких как «aaa».
Для ваших целей, используйте модификатор /g
как другие предлагают (заменить все матчи по всему миру), и вы также можете использовать заранее определенный класс символов \D
(= не цифра) вместо [^0-9]
, что привело бы к более кратким регулярным выражением /\D+/
.
, чтобы понять это лучше. не должен «a» и «.dfwe» попадать под + группу, потому что это 1 и более. –
'\ D +' говорит «искать один или несколько нецифровых чисел», тогда как '(\ D) +' ищет одно или несколько повторений (той же) нецифровой, что не то, что вы хотите. Теперь, независимо от того, выполняете ли вы '/ \ D/g' (заменяете каждую отдельную цифру) или'/\ D +/g' (заменить каждую последовательность цифр), не имеет значения, кроме, возможно, с точки зрения производительности , который не будет заметен, если вы не обработаете десятки тысяч строк. – fanaugen
ах большое спасибо. Это прекрасно объясняет мне. Благодаря ! –
насчет отрицательных чисел:
Используя пример Andy E работает, если у вас есть отрицательное число. Затем он удаляет символ «-», оставляя при этом всегда положительное число (что может быть хорошо). Однако, если вы хотите сохранить номер меньше, чем 0, я хотел бы предложить следующее:
"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100
Но будьте осторожны, потому что это оставит все - символы, давая вам ошибку, если ваш текст выглядит как «-а-«» 100.dfwe "
Он действительно не говорит о цифрах, просто группы цифр. Во всяком случае, ваше регулярное выражение все еще совпадает с '-', потому что оно не находится в начале строки. –
Основано на ответе @ user3324764. Сделайте функцию прототипа и преобразуйте число в число.
String.prototype.extractNumber = function()
{
return Number(this.replace(/(?!-)[^0-9.]/g, ""));
};
Пример:
"123.456px".extractNumber(); // 123.456
спасибо, и что именно делает "+" означает? –
@PrakashRaman: это означает * соответствие одному или нескольким из предыдущих символов *. Это не нужно, но это немного увеличит производительность регулярного выражения, уменьшив требуемое количество замещений. –
(Технически этот ответ отвечает на вопрос, но терпит неудачу при поплавках) "123.456px" .replace (/ \ D +/g, ""); -> 123456 –