mira, lamentablemente con puro 
regex no podemos asegurar que supere cierto numero entero, como el 100... tan solo un numero determinado de caracteres... 
entonces, tu expresión seria algo así...  
Código:
 /^[0-9]{1,3}(\.[0-9]+)?%?$/
  de este modo, obtenemos 
de 1 a 3 números del 0 al 9... posiblemente seguidos de 
punto y al menos un numero decimal... además de un 
posible signo de porcentaje 
no estoy seguro de su precisión, pero al menos... el error conocido seria que puede capturar....   999.99999999999...N% (suerte)