Tengo una cadena como esta:
key[type=order][0].item[id={getVal(obj[type=item][0].id)}]y quiero dividir esta cadena como:
[ ['key', '[type=order]', '[0]'], ['item', '[id={getVal(obj[type=item][0].id)}]'] ]En primer lugar, dividí la cadena a través del punto de primer nivel:
const str = 'key[type=order][0].item[id={getVal(obj[type=item][0].id)}]'; const arr = str.split(/\.(?![^[]*])/).filter(Boolean);Esta matriz generada como esta:
['key[type=order][0]', 'item[id={getVal(obj[type=item][0].id)}]']Y después de eso, quiero dividir todos los elementos de la matriz a través del corchete de primer nivel con:
arr.map(item => item.split(/(\[.+?\])/).filter(Boolean))Esta matriz generada:
[ ['key', '[type=order]', '[0]'], ['item', '[id={getVal(obj[type=item]', '[0]', '.id)}]'] ]Quiero dividir elementos solo corchetes de primer nivel no anidados. ¿Cómo puedo hacer esto con expresiones regulares en javascript?
esto debería hacerlo en tu división final
arr.map(item => item.split(/(\[[^\]]+\(.*\).*\])|(\[.+?\])/).filter(Boolean))Lo que genera la matriz:
[ ['key', '[type=order]', '[0]'], ['item', '[id={getVal(obj[type=item][0].id)}]'] ] La expresión regular es /(\[[^\]]+\(.*\).*\])|(\[.+?\])/ y la primera parte busca corchetes con paréntesis dentro, y descuenta los corchetes dentro de esos. Después de la | (o) ¡se ejecuta su expresión regular original!
Actualizar
arr.map(item => item.split(/(\[[^\]]+\([^\)]*\)[^\]]*\])|(\[.+?\])/).filter(Boolean))