Respuestas:
Expresiones regulares:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Esto devolvería una matriz con dos elementos dentro, '102' y '1948948'. Opere como desee. Si no coincide con ninguno, devolverá nulo.
Para concatenarlos:
'something102asdfkj1948948'.match( numberPattern ).join('')
Suponiendo que no esté tratando con decimales complejos, esto debería ser suficiente.
d
, así que.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
También puede quitar todos los caracteres que no sean dígitos ( \D
o [^0-9]
):
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
Para el número con fracción decimal y signo menos, uso este fragmento:
var NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;
'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]
Actualización: - 7/9/2018
Encontró una herramienta que le permite editar visualmente la expresión regular: JavaScript Regular Expression Parser & Visualizer .
Actualizar:
Aquí hay otro con el que incluso puede depurar regexp: probador y depurador de expresiones regulares en línea .
Actualizar:
Otro: RegExr .
Actualizar:
Si solo quieres dígitos:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Ahora tienes los dígitos unidos
Supongo que quieres obtener números de la cadena. En cuyo caso, puede usar lo siguiente:
// Returns an array of numbers located in the string
function get_numbers(input) {
return input.match(/[0-9]+/g);
}
var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');
alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null
get_numbers/1
devuelve una matriz de cadena, no un número. Para su ejemplo, devolvería: * ["102"]
* ["102", "12"]
* nulo
Las respuestas dadas en realidad no coinciden con su pregunta, lo que implica un número final . Además, recuerde que está recuperando una cadena; si realmente necesita un número, arroje el resultado:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Si se trata de identificadores numéricos de elementos en una página web, su código también podría aceptar un Element
, extrayendo el número de su id
(o su primer padre con un id
); si tienes un Event
práctico, es probable que también puedas obtenerlo Element
.
En mi opinión, la respuesta n. ° 3 de Chen Dachao en este momento es el camino correcto si desea capturar cualquier tipo de número, pero la expresión regular se puede acortar de:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
a:
/-?\d*\.?\d+/g
Por ejemplo, este código:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
genera esta matriz:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
He descifrado un ejemplo de gradiente lineal MDN para que pruebe completamente la expresión regular y no necesite desplazarse aquí. Creo que he incluido todas las posibilidades en términos de números negativos, decimales, sufijos de unidades como deg y%, coma incoherente y uso del espacio, y los caracteres adicionales de punto / punto y guión / guión dentro del texto "lin-grad.ient ". Por favor, avíseme si me falta algo. Lo único que puedo ver que no maneja es un número decimal mal formado como "0..8".
Si realmente desea una matriz de números, puede convertir la matriz completa en la misma línea de código:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Mi código particular, que analiza las funciones CSS, no necesita preocuparse por el uso no numérico del carácter punto / punto, por lo que la expresión regular puede ser aún más simple:
/-?[\d\.]+/g
Usando split y regex:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
Según la respuesta de @ Syntle, si solo tiene caracteres no numéricos, obtendrá un Uncaught TypeError: Cannot read property 'join' of null
.
Esto evitará errores si no se encuentran coincidencias y devolverá una cadena vacía:
('something'.match( /\d+/g )||[]).join('')
Si también desea números separados por puntos / comas, entonces:
\d*\.?\d*
o
[0-9]*\.?[0-9]*
Puede usar https://regex101.com/ para probar sus expresiones regulares.
Todo lo que tienen otras soluciones, pero con un poco de validación.
// value = '675-805-714'
const validateNumberInput = (value) => {
let numberPattern = /\d+/g
let numbers = value.match(numberPattern)
if (numbers === null) {
return 0
}
return parseInt(numbers.join([]))
}
// 675805714