Aquí hay una expresión regular:
const pattern = /\d+\s*\.\s*((.+?\n)+?(?=[aA]\)))/; const str = `8. X-XIII asrlarda barpo etilgan inshootlar to'g'ri berilgan qatorni aniqlang. 1) Ismoil Somoniy maqbarasi, 2) Masjidi Kalon, 3) Namozgoh, 4) Minorayi Kalon, 5) Vobkent minorasi, 6) Ahmad Yassaviy maqbarasi, 7) Jarqo'rg'on minorasi, 8) Kaltaminor. A) 1, 2, 3, 6, 7 B) 1, 3, 4, 5, 7 C) 1, 2, 4, 6, 8 D) 2, 3, 4, 6, 7` const m = pattern.exec(str); console.log(m) // outputs null when run on Android
Aquí está exactamente lo mismo ejecutándose en una consola de navegador:
const pattern = /\d+\s*\.\s*((.+?\n)+?(?=[aA]\)))/; const str = `8. X-XIII asrlarda barpo etilgan inshootlar to'g'ri berilgan qatorni aniqlang. 1) Ismoil Somoniy maqbarasi, 2) Masjidi Kalon, 3) Namozgoh, 4) Minorayi Kalon, 5) Vobkent minorasi, 6) Ahmad Yassaviy maqbarasi, 7) Jarqo'rg'on minorasi, 8) Kaltaminor. A) 1, 2, 3, 6, 7 B) 1, 3, 4, 5, 7 C) 1, 2, 4, 6, 8 D) 2, 3, 4, 6, 7` const m = pattern.exec(str); console.log(m)
Supongo que reaccionar nativo no puede compilar mi patrón de javascript en código nativo. ¿Qué me estoy perdiendo?
Parece que los finales de línea en el entorno de destino son CRLF.
En un sabor de expresiones regulares de ECMAScript, un .
por defecto no coincide con los símbolos de retorno de carro. Entonces, \n
no es suficiente para hacer coincidir un salto de línea.
Hay varias formas de solucionar este problema. Puede modificar su expresión regular actual para asegurarse de que coincida con los finales de línea CRLF/LF/CR:
/\d+\s*\.\s*((?:.+(?:\r\n?|\n))*?(?=[aA]\)))/
Vea esta demostración de expresiones regulares . Aquí, (?:\r\n?|\n)
coincide con CR y una secuencia de caracteres LF opcional, o un solo carácter LF.
O bien, puede hacer coincidir cero o más caracteres:
/\d+\s*\.\s*([\w\W]*?)(?=[aA]\))/
Vea esta demostración de expresiones regulares .
Tenga en cuenta que reemplacé el +?
con *?
, por si acaso puede haber valores vacíos entre el número con un punto y a)
. El [\w\W]*?
es una solución común para hacer coincidir cero o más caracteres.