Jeśli mam ciąg, taki jak „coś12” lub „coś102”, w jaki sposób użyłbym wyrażenia regularnego w javascript, aby zwrócić tylko części liczbowe?
Odpowiedzi:
Wyrażenia regularne:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Spowoduje to zwrócenie tablicy z dwoma elementami w środku: „102” i „1948948”. Działaj tak, jak chcesz. Jeśli nie pasuje do żadnego, zwróci wartość null.
Aby je połączyć:
'something102asdfkj1948948'.match( numberPattern ).join('')
Zakładając, że nie masz do czynienia ze złożonymi liczbami dziesiętnymi, to powinno wystarczyć.
d
, więc.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Możesz także usunąć wszystkie znaki niecyfrowe ( \D
lub [^0-9]
):
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
W przypadku liczby z ułamkiem dziesiętnym i znakiem minus używam tego fragmentu:
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"]
Aktualizacja: - 7/9/2018
Znalazłem narzędzie, które pozwala na wizualną edycję wyrażeń regularnych: JavaScript Parser wyrażeń regularnych i Visualizer .
Aktualizacja:
Oto kolejny, za pomocą którego można nawet debugować wyrażenie regularne: Tester i debugger wyrażeń regularnych online .
Aktualizacja:
Kolejny: RegExr .
Aktualizacja:
Jeśli chcesz tylko cyfry:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Teraz masz dołączone cyfry
Myślę, że chcesz uzyskać liczbę (y) z ciągu. W takim przypadku możesz użyć:
// 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
zwraca tablicę łańcuchową, a nie liczbę. Na przykład zwróci: * ["102"]
* ["102", "12"]
* null
IMO, odpowiedź nr 3 w tej chwili autorstwa Chen Dachao jest właściwą drogą, jeśli chcesz uchwycić jakąkolwiek liczbę, ale wyrażenie regularne można skrócić z:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
do:
/-?\d*\.?\d+/g
Na przykład ten kod:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
generuje tę tablicę:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
Zrobiłem przykład gradientu liniowego MDN, aby w pełni przetestować wyrażenie regularne i nie trzeba go tu przewijać. Myślę, że uwzględniłem wszystkie możliwości w zakresie liczb ujemnych, dziesiętnych, sufiksów jednostek, takich jak deg i%, niespójne użycie przecinków i spacji oraz dodatkowe kropki / kropki i znaki łącznika / myślnika w tekście „lin-grad.ient ”. Daj mi znać, jeśli czegoś brakuje. Jedyne, co widzę, że nie obsługuje, to źle sformułowana liczba dziesiętna, taka jak „0..8”.
Jeśli naprawdę chcesz mieć tablicę liczb, możesz przekonwertować całą tablicę w tym samym wierszu kodu:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Mój konkretny kod, który analizuje funkcje CSS, nie musi się martwić o nienumeryczne użycie znaku kropki / kropki, więc wyrażenie regularne może być jeszcze prostsze:
/-?[\d\.]+/g
Podane odpowiedzi w rzeczywistości nie pasują do Twojego pytania, co oznacza liczbę końcową . Pamiętaj też, że otrzymujesz z powrotem ciąg; jeśli faktycznie potrzebujesz liczby, rzuć wynik:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Jeśli masz do czynienia z numerycznymi identyfikatorami pozycji na stronie internetowej, kod może również pożytecznie akceptować Element
, wyodrębniając liczbę z jej id
(lub jej pierwszego elementu nadrzędnego za pomocą id
); jeśli masz Event
poręczność, prawdopodobnie możesz również uzyskać Element
z tego.
Korzystanie z podziału i wyrażenia regularnego:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
Zgodnie z odpowiedzią @ Syntle, jeśli masz tylko znaki nienumeryczne, otrzymasz rozszerzenie Uncaught TypeError: Cannot read property 'join' of null
.
Zapobiegnie to błędom, jeśli nie zostaną znalezione żadne dopasowania i zwróci pusty ciąg:
('something'.match( /\d+/g )||[]).join('')
Jeśli chcesz również liczby oddzielone kropkami / przecinkami, to:
\d*\.?\d*
lub
[0-9]*\.?[0-9]*
Możesz użyć https://regex101.com/, aby przetestować swoje wyrażenia regularne.