Estoy tratando de dividir una cadena en una matriz de contenidos de texto que están presentes dentro de los delimitadores [@ y ] . Solo los caracteres entre [@ y ] pueden coincidir. Al estar provisto de una cadena como ...
const stringA = '[@Mary James], [@Jennifer John] and [@Johnny Lever[@Patricia Robert] are present in the meeting and [@Jerry[@Jeffery Roger] is absent.'... se espera el siguiente resultado ...
[ 'Mary James', 'Jennifer John', 'Patricia Robert', 'Jeffery Roger' ]Se puede utilizar cualquier lógica que conduzca al resultado esperado.
Una autobúsqueda de una solución trajo la siguiente expresión regular aplicada ...
stringA.match(/(?<=\[@)[^\]]*(?=\])/g);Pero el resultado no cumple con los requisitos porque la matriz presenta los siguientes elementos...
[ 'Mary James', 'Jennifer John', 'Johnny Lever[@Patricia Robert', 'Jerry[@Jeffery Roger' ]Cerrar, solo falta la exclusión de [ :
stringA.match(/(?<=\[@)[^\[\]]*(?=\])/g); // ^^ exclude '[' as well as ']'La expresión regular del OP no presenta el corchete de apertura dentro de la clase de carácter negado, por lo que cambia el /(?<=\[@)[^\]]*(?=\])/g del OP a (?<=\[@)[^\[\]]*(?=\]) ya resuelve el problema del OP para la mayoría de los entornos sin incluir los navegadores Safari debido a la búsqueda posterior que no es compatible .
Solución basada en una expresión regular ... /\[@(?<content>[^\[\]]+)\]/g ... con un grupo de captura con nombre ...
const sampleText = '[@Mary James], [@Jennifer John] and [@Johnny Lever[@Patricia Robert] are present in the meeting and [@Jerry[@Jeffery Roger] is absent.' // see ... [https://regex101.com/r/v234aT/1] const regXCapture = /\[@(?<content>[^\[\]]+)\]/g; console.log( Array.from( sampleText.matchAll(regXCapture) ).map( ({ groups: { content } }) => content ) );