eche un vistazo a mi siguiente expresión regular: https://regex101.com/r/HMya54/2
Solo quiero encontrar la función de javascript con "_tsid", no todas las funciones de JavaScript, y reemplazar toda esa función por un comentario HTML <!-- here was my function --> .
Intenté algo como: /<script.*?>([\s\S]*?)_tsid([\s\S]*?)<\/script>/ pero parece que no es el camino correcto.
¿Puedes ayudarme con ese problema?
¡Gracias!
La forma más sencilla es usar su versión actual (o su versión optimizada, ver más abajo) y usar una devolución de llamada como argumento de reemplazo donde puede verificar si la coincidencia contiene la cadena de su elección y, si está allí, realizar el reemplazo:
let text = '<script type="text/javacript">alert("First one!");</script>\n\n<script>console.log("Hello World");</script>\n\n<script type="text/javascript">\n (function () {\n var _tsid = \'XFE5AF4B9ADDACA0E60017B1BC4D16AE2\';\n _tsConfig = {\n \'yOffset\': \'0\', /* offset from page bottom */\n \'variant\': \'reviews\', /* reviews, default, custom, custom_reviews */\n \'customElementId\': \'\', /* required for variants custom and custom_reviews */\n \'trustcardDirection\': \'\', /* for custom variants: topRight, topLeft, bottomRight, bottomLeft */\n \'customBadgeWidth\': \'\', /* for custom variants: 40 - 90 (in pixels) */\n \'customBadgeHeight\': \'\', /* for custom variants: 40 - 90 (in pixels) */\n \'disableResponsive\': \'false\', /* deactivate responsive behaviour */\n \'disableTrustbadge\': \'false\', /* deactivate Trustbadge® */\n \'responsive\': {\n \'variant\': \'\', /* floating, custom */\n \'customElementId\': \'\' /* required for variant custom */\n }\n };\n var _ts = document.createElement(\'script\');\n _ts.type = \'text/javascript\';\n _ts.charset = \'utf-8\';\n _ts.async = true;\n _ts.src = \'//widgets.trustedshops.com/js/\' + _tsid + \'.js\';\n var __ts = document.getElementsByTagName(\'script\')[0];\n __ts.parentNode.insertBefore(_ts, __ts);\n })();\n</script>'; text = text.replace(/</g, '<').replace(/<script[^>]*>[^<]*(?:<(?!\/?script[\s>])[^<]*)*<\/script>/g, (x) => x.includes("_tsid") ? "<!-- here was my function -->" : x); console.log(text); La expresión regular ahora es /<script[^>]*>[^<]*(?:<(?!\/?script[\s>])[^<]*)*<\/script>/g , coincide con <script , cero o más caracteres que no sean > , luego un > , luego cero o más caracteres que no sean < , luego cero o más secuencias de < no seguidas de un / opcional y luego una secuencia de script seguida de un espacio en blanco o > y luego cero o más caracteres no < , y luego </script> , y luego se reemplaza el texto que contiene solo _tsid , de lo contrario, la coincidencia se reinserta en la cadena resultante.