Respostas:
Expressões regulares:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Isso retornaria uma matriz com dois elementos internos, '102' e '1948948'. Opere como desejar. Se não corresponder a nenhum, retornará nulo.
Para concatená-los:
'something102asdfkj1948948'.match( numberPattern ).join('')
Supondo que você não esteja lidando com decimais complexos, isso deve bastar, suponho.
d
, então.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Você também pode remover todos os caracteres que não são dígitos ( \D
ou [^0-9]
):
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
Para número com fração decimal e sinal de menos, eu uso este trecho:
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"]
Atualização: - 09/07/2018
Encontrou uma ferramenta que permite editar visualmente expressões regulares: JavaScript Regular Expression Parser & Visualizer .
Atualizar:
Aqui está outro com o qual você pode até depurar o regexp: testador e depurador online de regex .
Atualizar:
Outro: RegExr .
Atualizar:
Se você deseja apenas dígitos:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Agora você junta os dígitos
Eu acho que você deseja obter números da string. Nesse caso, você pode usar o seguinte:
// 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
retorna uma matriz de string, não número. Para seu exemplo, ele retornaria: * ["102"]
* ["102", "12"]
* null
As respostas dadas não correspondem à sua pergunta, o que implicava um número final . Além disso, lembre-se de que você está recebendo uma string de volta; se você realmente precisa de um número, transmita o resultado:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Se você estiver lidando com IDs de itens numéricos em uma página da Web, seu código também poderá aceitar um Element
extraindo o número dele id
(ou seu primeiro pai com um id
); se você for Event
útil, provavelmente também poderá tirar Element
proveito disso.
Na IMO, a resposta nº 3 de Chen Dachao neste momento é o caminho certo a seguir, se você deseja capturar qualquer tipo de número, mas a expressão regular pode ser abreviada de:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
para:
/-?\d*\.?\d+/g
Por exemplo, este código:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
gera esta matriz:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
Eu massacrei um exemplo de gradiente linear MDN para que ele teste totalmente a regexp e não precise rolar aqui. Acho que incluí todas as possibilidades em termos de números negativos, decimais, sufixos de unidade como deg e%, vírgula inconsistente e uso de espaço e os caracteres extras de ponto / período e hífen / hífen no texto "lin-grad.ient " Por favor, deixe-me saber se estou faltando alguma coisa. A única coisa que vejo que ele não lida com um número decimal mal formado como "0..8".
Se você realmente deseja uma matriz de números, pode converter a matriz inteira na mesma linha de código:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Meu código específico, que está analisando funções CSS, não precisa se preocupar com o uso não numérico do caractere ponto / ponto, para que a expressão regular possa ser ainda mais simples:
/-?[\d\.]+/g
Usando split e regex:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
De acordo com a resposta do @ Syntle, se você tiver apenas caracteres não numéricos, receberá um Uncaught TypeError: Cannot read property 'join' of null
.
Isso evitará erros se nenhuma correspondência for encontrada e retornará uma string vazia:
('something'.match( /\d+/g )||[]).join('')
Se você quiser números separados por pontos / vírgulas também:
\d*\.?\d*
ou
[0-9]*\.?[0-9]*
Você pode usar https://regex101.com/ para testar suas regexes.