Tengo algunas cadenas que contienen datos de presión arterial, los números antes de / indican el extremo superior/superior de la presión arterial (sistólica) y los números después de / indican el extremo inferior de la presión arterial (diastólica).
las cuerdas son asi
let str1 = "170/80"; // Should Pass let str2 = "90/60"; // Should Pass let str3 = "140/90"; // Should Pass let str4 = "should not/pass"; // Shouldn't Pass Tengo una expresión regular que intenta asegurarse de que estas cadenas sean lecturas de presión arterial, es decir, asegurándose de que los valores sean todos números y entre ellos haya un / pero no parece funcionar (no coincide incluso con el cadenas supuestamente correctas).
Mi expresión regular es: ((\d)/(\d))
¿Alguien puede decirme por qué no funciona? y ¿cuál debería ser la expresión regular correcta para esto?
El problema en su expresión regular es que no está escapando de su barra inclinada \ , pero también está haciendo coincidir dígitos individuales \d . Para resolver estos problemas, es posible que desee una expresión regular como esta:
(\d+)\/(\d+)Consulta la demostración aquí .
Como se menciona en los comentarios, puede usar \d+ para hacer coincidir varios dígitos. Sin embargo, si su texto puede contener otros números, es posible que desee usar el \d{1,3} más específico para capturar solo valores en el rango válido para la presión arterial. La expresión regular completa sería ((\d{1,3})\/(\d{1,3}))
Escape de la barra oblicua y use más de un dígito
https://regex101.com/r/uC2w4h/1
Aquí con pruebas de cordura para quitar fechas u otros números raros. Cambie 45 a lo bajo que quiera probar.
const str = `170/80 90/60 140/90 should not/pass on 11/12` const bps = [...str.match(/(\d{2,3})\/(\d{2,3})/g)].filter(match => { const [syst,diast] = match.split("/") return +syst > 45 && diast > 45; }) console.log(bps)