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?
javascript
regex
Malcolm
źródło
źródło
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)
źródło
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:
Regexper i Regex Pal .
źródło
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
źródło
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
źródło
get_numbers/1
zwraca tablicę łańcuchową, a nie liczbę. Na przykład zwróci: *["102"]
*["102", "12"]
* nullIMO, 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:
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:
źródło
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 jejid
(lub jej pierwszego elementu nadrzędnego za pomocąid
); jeśli maszEvent
poręczność, prawdopodobnie możesz również uzyskaćElement
z tego.źródło
var result = input.match(/\d+/g).join([])
źródło
Korzystanie z podziału i wyrażenia regularnego:
var str = "fooBar0123".split(/(\d+)/); console.log(str[0]); // fooBar console.log(str[1]); // 0123
źródło
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('')
źródło
Jeśli chcesz również liczby oddzielone kropkami / przecinkami, to:
lub
[0-9]*\.?[0-9]*
Możesz użyć https://regex101.com/, aby przetestować swoje wyrażenia regularne.
źródło
Wszystko, co mają inne rozwiązania, ale z niewielką weryfikacją
// 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
źródło