Inizia a correre all'età di nove anni sulle minimoto. Nel 2007 giunge secondo nel Cub Prix Championship. Nel 2009 vince il campionato malese Underbones nella categoria debuttanti, ottenendo anche qualche podio nelle gare di esperti. Nel 2010 corre nell'Asia Road Racing Championship Supersport, concludendo dodicesimo; l'anno successivo finisce quarto nella stessa competizione e debutta nel motomondiale nel Gran Premio casalingo, correndo come wildcard a bordo di una Moriwaki nella classe Moto2. Nel 2012 corre nella categoria Moto2 del campionato spagnolo, finendo sesto; nello stesso anno corre nuovamente come wildcard nel motomondiale in Malesia, a bordo di una FTR, giungendo terzo.[2] Nel 2013 corre ancora nel CEV, con due vittorie e il terzo posto finale; nello stesso anno corre nel motomondiale come wildcard nei Gran Premi di Francia, Catalogna, Malesia e Comunità Valenciana a bordo di una Kalex, ottenendo un punto.
Nel 2014 diventa pilota titolare, ingaggiato dal team Petronas Raceline Malaysia, che gli affida una Kalex. Ottiene come miglior risultato un settimo posto a Indianapolis e termina la stagione al 19º posto con 42 punti.
Nel 2015 rimane nello stesso team, migliorando la posizione in classifica, chiude infatti sedicesimo con 64 punti. Nel 2016 rimane ancora nello stesso team, alla guida di una Kalex Moto2, esordisce ottenendo un quarto posto nel GP del Qatar. Ottiene altri due quarti posti in Catalogna e Gran Bretagna e termina la stagione al 9º posto con 118 punti. Nel 2017 inizia il quarto anno consecutivo con il team Petronas Raceline Malaysia, nella classe Moto2. Ottiene un secondo posto nel Gran Premio di San Marino e un terzo posto in Giappone e termina la stagione al 10º posto con 106 punti. Sempre nel 2017 disputa, come pilota wild card, la gara inaugurale del CEV Moto2 dove ottiene l'hat trick portandosi momentaneamente in testa al campionato. Nel 2018 passa in MotoGP, alla guida della Yamaha YZR-M1 del team Tech 3; il compagno di squadra è Johann Zarco.[3] Ottiene come miglior risultato un nono posto in Argentina e termina la stagione al 16º posto con 46 punti. Nel 2019 rimane nello stesso team, questa volta alla guida di una KTM RC16; il compagno di squadra è Miguel Oliveira. Ottiene come miglior risultato un tredicesimo posto in Gran Bretagna e termina la stagione al 23º posto con 9 punti.
Nel 2020 corre in Moto2, con una Speed Up del team Aspar; il compagno di squadra è Arón Canet. Ottiene come miglior risultato un sesto posto in Spagna e termina la stagione al 21º posto con 21 punti.[4] In questa stagione è costretto a saltare il Gran Premio di Stiria a causa di contusioni riportate nel precedente GP d'Austria.[5]
Nel 2021 passa alla guida della NTS, con compagno di squadra Barry Baltus. Ottiene come miglior risultato un nono posto in Italia e termina la stagione al ventottesimo posto con 9 punti.[6] Nel 2022 passa al mondiale Superbikeː gareggia con il team MIE Racing Honda, il compagno di squadra è Leandro Mercado. Dopo aver saltato delle gare per infortunio, venendo sostituito da Maximilian Scheib,[7] totalizza dieci punti classificandosi ventitreesimo nel mondiale e undicesimo nel Trofeo Indipendenti.[8] Nel 2023 rimane con il team MIE Racing Honda avendo Eric Granado come compagno di squadra, con undici punti si classifica ventunesimo in campionato e decimo tra gli indipendenti.[9] Nel 2024 gareggia nell'Asia Road Racing Championship con Ducati, moto con cui prende parte anche alla 8 ore di Suzuka.[10] In occasione del Gran Premio di Portimão torna nel mondiale Superbike con una Wild card chiudendo le tre prove al di fuori della zona punti.[10]