Necesito dividir la cadena, el carácter dividido es "," pero debo omitir el contenido en "("...")".
const paramString = "gyro (param1, param2), proximity, Ultra Wideband (UWB) support, compass"; const paramArr = paramString.match(/[^(\)\,]+(\(.+?\))?/g).map( item => item.trim() );En mi resultado, paramArr[2] es malo.
[ "gyro (param1, param2)", "proximity", "Ultra Wideband (UWB)", "support", "compass" ]necesito resultado:
[ "gyro (param1, param2)", "proximity", "Ultra Wideband (UWB) support", "compass" ]Indique cómo actualizar mi RegEx.
Debe utilizar la anticipación negativa. Básicamente, está seleccionando todas las comas (con espacios después de ellas para recortarlas) que no van seguidas de un ) si no hay ( antes:
const paramString = "gyro (param1, param2), proximity, Ultra Wideband (UWB) support, compass"; const paramArr = paramString.split(/,\s*(?![^(]*\))/); console.log(paramArr);NOTA: no funcionará para paréntesis anidados. Fallará en el siguiente escenario:
const paramString = "gyro (param1, (param2)), proximity, Ultra Wideband (UWB) support, compass";Pruebe el regx mencionado a continuación, esto romperá su cadena solo en los tokens esperados.
/[\w\ ]+(\([^)]*\))?(\ \w+)?/giEl regx rompe su cadena en los siguientes tokens.
gyro (param1, param2) proximity Ultra Wideband (UWB) support compassSiga el enlace para la demostración en vivo del regx:
https://regex101.com/r/yCYHgw/1
https://regex101.com/r/yCYHgw/2
(actualizado, regx para trabajar solo con no anidados)