Risposte:
Espressioni regolari:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Ciò restituirebbe una matrice con due elementi all'interno, "102" e "1948948". Operare come si desidera. Se non corrisponde a nessuno, restituirà null.
Per concatenarli:
'something102asdfkj1948948'.match( numberPattern ).join('')
Supponendo che tu non abbia a che fare con decimali complessi, questo dovrebbe bastare, suppongo.
d, quindi.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Puoi anche rimuovere tutti i caratteri non numerici ( \Do [^0-9]):
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
Per il numero con la frazione decimale e il segno meno, utilizzo questo frammento:
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"]
Aggiornamento: - 09/07/2018
Trovato uno strumento che consente di modificare visivamente l'espressione regolare: Parser e Visualizzatore di espressioni regolari JavaScript .
Aggiornare:
Eccone un altro con cui è anche possibile eseguire il debug di regexp: tester regex online e debugger .
Aggiornare:
Un altro: RegExr .
Aggiornare:
Se vuoi solo cifre:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Ora ottieni le cifre unite
Immagino che tu voglia ottenere i numeri dalla stringa. In tal caso, è possibile utilizzare quanto segue:
// 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/1restituisce un array di stringhe, non numeri. Per il tuo esempio, verrebbe restituito: * ["102"]* ["102", "12"]* null
Le risposte fornite in realtà non corrispondono alla tua domanda, il che implicava un numero finale . Inoltre, ricorda che stai recuperando una stringa; se hai davvero bisogno di un numero, lancia il risultato:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Se hai a che fare con ID di elementi numerici su una pagina web, il tuo codice potrebbe anche accettare utilmente un Element, estraendo il numero dal suo id(o dal suo primo genitore con un id); se ne hai a Eventportata di mano, puoi probabilmente ottenere Elementanche quello.
IMO la risposta n. 3 in questo momento di Chen Dachao è la strada giusta da percorrere se vuoi catturare qualsiasi tipo di numero, ma l'espressione regolare può essere abbreviata da:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
per:
/-?\d*\.?\d+/g
Ad esempio, questo codice:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
genera questo array:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
Ho macellato un esempio di gradiente lineare MDN in modo da testare completamente la regexp e non è necessario scorrere qui. Penso di aver incluso tutte le possibilità in termini di numeri negativi, decimali, suffissi unitari come deg e%, uso incoerente di virgola e spazio e i caratteri punto / punto e trattino / trattino extra nel testo "lin-grad.ient ". Per favore fatemi sapere se mi manca qualcosa. L'unica cosa che posso vedere che non gestisce è un numero decimale mal formato come "0..8".
Se vuoi davvero un array di numeri, puoi convertire l'intero array nella stessa riga di codice:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Il mio codice particolare, che analizza le funzioni CSS, non deve preoccuparsi dell'uso non numerico del carattere punto / punto, quindi l'espressione regolare può essere ancora più semplice:
/-?[\d\.]+/g
Utilizzando split e regex:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
Secondo la risposta di @ Syntle, se hai solo caratteri non numerici otterrai un Uncaught TypeError: Cannot read property 'join' of null.
Ciò impedirà errori se non viene trovata alcuna corrispondenza e restituirà una stringa vuota:
('something'.match( /\d+/g )||[]).join('')
Se vuoi anche numeri separati da punti / virgole, allora:
\d*\.?\d*
o
[0-9]*\.?[0-9]*
Puoi usare https://regex101.com/ per testare le tue regex.