Самое простое регулярное выражение, которое вы возможно ищете, это \D
(любой символ, который не является цифрой. Есть несколько таких "отрицательных" выражений - \d
соответствует цифре, \D
соответствует нечисловым значениям. \w
соответствует символам "слова" (буквенно-цифровым и подчеркиванию), \W
соответствует нечисловым значениям. \s
соответствует пробельным символам, \S
соответствует непробельным символам).
Итак:
str = '$4,320 text/folowme';
number = str.replace(/\D/g,'');
должно выдать '4320' внутри числа. «Г» важно. Он говорит: глобальный поиск / замена всех экземпляров этого регулярного выражения. Без этого вы просто потеряете знак доллара. :)
Обратите внимание, что если у вас есть отрицательные числа или рациональные числа (которые могут иметь два нецифровых символа в их представлении, '-' и '.'), Ваша проблема становится немного сложнее. Вы можете сделать что-то вроде:
number = str.replace(/[^-.0-9]/g,'');
Это будет работать до тех пор, пока ваши числа будут правильно сформированы, поскольку никто не делает ничего сумасшедшего, например «4-5.0-9aaaa4z.2».
Чтобы быть в безопасности, вы можете запустить этот список через parseInt
или parseFloat
:
number = parseFloat(str.replace(/[^-.0-9]/g,''));
UPDATE
Я разложил требование избегать включения последующих чисел. Если пробел надежно ограничивает конец нужного вам числа, как это делается в примерах, вы можете добавить пробел или \ s к классу отрицательных символов в последнем приведенном мной примере, так что это будет примерно так:
number = parseFloat(str.replace(/[^-.0-9\s]/g,''));
и лишние цифры будут просто отлично.
ОБНОВЛЕНИЕ 2
Подумав немного об этом, использование parseFloat
означает, что вам не нужно вычеркивать все - только все нечисловые символы до нужного вам числа и запятые. Таким образом, мы можем разбить это на два более простых регулярных выражения (и, возможно, быстрее, тем более, что один из них не является глобальным). И тогда parseFloat
отбросит завершающий нецифровый ввод для вас.
number = parseFloat(str.replace(/,/g,'').replace(/^[^-0-9]*/,''));