quiero preguntar cómo debo modificar esta expresión /^(\+?266)(22|28|57|58|59|27|52)\d{6}$/ para que el valor evaluado siempre comience con +266 y 2 dígitos después de eso deben ser 22 o 28 o 57 o 58 o 59 o 27 o 52 seguidos de 6 números aleatorios
Parece que estás casi listo para irte, excepto que no está claro por qué lo primero ? está allí si siempre desea comenzar con +266 , también escribió 37 en la pregunta pero tiene 27 en la expresión regular que incluyó.
Tampoco dijiste nada sobre la necesidad de capturar grupos para poder eliminar el primer conjunto de corchetes. Se requiere el segundo conjunto de corchetes para 'o' ( | ), pero puede incluir ?: para que no se capture.
Prueba esto:
/^\+266(?:22|28|57|58|59|27|52)\d{6}$/gmPuedes verlo funcionando aquí:
Su expresión regular original básicamente debería funcionar. Estaba a punto de escribir los mismos comentarios que @Ljdyer, pero como ya lo mencionó, puedo ahorrarme el aliento.
En mi expresión regular utilicé algunas clases de caracteres, como [28] , para acortarla, pero eso es opcional.
const rx=/^\+266(?:2[28]|5[2789]|37)\d{6}$/; console.log(["+26628123456","+26657763883", "+26638123456","+266591234567"] .map(s=>s.match(rx))); // the first two will match, the others won't