tengo una cadena:
[](first-(second))
Me gustaría eliminar (
y )
entre [](...
y el último ...)
Dicho esto, actualmente estoy usando (?<=\[\]\()(.*?)(?=\))
Supongo que (.*?)
debe reemplazarse con algún tipo de expresión que encuentre (
y )
en el medio.
Algo similar a string.replace(/(?<=\[\]\()(.*?)(?=\))/g, '')
Y la cadena debería verse como [](first-second)
Como ya usaste un lookbehind en el patrón con JavaScript, podrías usar un cuantificador infinito en el lookbehind, unir los 2 paréntesis que no deseas conservar y capturar en el grupo 1 lo que deseas conservar.
En el grupo de uso de reemplazo 1 usando $1
(?<=\[\]\([^()]*)\(([^()]*\))\)
El patrón coincide:
(?<=
Positivo mirar atrás, afirmar lo que está a la izquierda es:\[]
Partido []
\([^()]*
Coincidencia (
y 0+ veces cualquier carácter excepto (
y )
)
Cerrar mirar atrás\(
Partido (
([^()]*\))
Grupo de captura 1 , coincidencia 0+ veces cualquier carácter excepto (
y )
\)
Partido )
Demostración de expresiones regulares
const s = "[](first-(second))" const regex = /(?<=\[]\([^()]*)\(([^()]*\))\)/; console.log(s.replace(regex, "$1"))
O usando 2 grupos de captura en lugar de mirar atrás:
(\[]\([^()]*)\(([^()]*\))\)
Demostración de expresiones regulares
const s = "[](first-(second))" const regex = /(\[]\([^()]*)\(([^()]*\))\)/; console.log(s.replace(regex, "$1$2"))
Si no necesita un código elegante, ¿por qué no optar por el camino fácil? Extraiga la subcadena sin corchetes externos, reemplace y concat. los caracteres eliminados
s = '[](first-(second))'
mySubstring = s.substring(3, s.length -2); // 'first-(second)' //your replacement func. result = '[]('+mySubstring+')'; //'[](first-second)'
Aquí hay un ejemplo (sin usar anticipación). Debería guiarte en la dirección correcta.
Usando 2 grupos de captura y algunos conjuntos no codiciosos, puede ensamblar su cadena de destino.
No asume paréntesis ni corchetes anidados adicionales, aunque puede modificarlo según sus necesidades para incluir solo caracteres alfanuméricos en los conjuntos de caracteres.
const d = '[](foo-(bar)) [](foo2-(bar2))' const rx = /(\[\]\([^-\(\)\[\]]*?-)\(([^\)]*?)\)\)/g const m = rx.exec(d) console.log(m) const fixed = d.replace(rx, '$1$2)') console.log(fixed)