Tengo la siguiente cadena:
"By signing in, I agree to the {{#a}}[Terms of Use](https://www.example.com/termsofuse){{/a}} and {{#a}}[Privacy Policy](https://www.example.com/privacy){{/a}}." Y estoy usando la siguiente expresión regular para dividir las palabras mientras considero {{#a}}[Terms of Use](https://www.example.com/termsofuse){{/a}} y {{#a}}[Privacy Policy](https://www.example.com/privacy){{/a}} como palabras completas.
\s+(?![^\[]*\]) Mi problema es que mi expresión regular actual no elimina el punto final al final de {{#a}}[Privacy Policy](https://www.example.com/privacy){{/a}}. . Idealmente, me gustaría que mi expresión regular divida puntos, signos de exclamación y signos de interrogación. Dicho esto, no estoy seguro de cómo diferenciaría entre un punto al final de la palabra y un punto que forma parte de la URL.
Puede probar una variación de la siguiente expresión regular:
\s+(?![^\[]*\])|(?=[\.?!](?![a-zA-Z0-9_%-])) La parte nueva es la alternancia de (?=[\.?!](?![a-zA-Z0-9_%-])) al final. Realiza una búsqueda anticipada positiva de un punto, un signo de interrogación o una explosión, utilizando una búsqueda anticipada negativa para asegurarse de que no esté seguido por un carácter similar a una URL. Es posible que deba ajustar esa clase de carácter entre paréntesis para que contenga los caracteres que desea considerar como parte de la URL.
En lugar de .split , será mejor que .match aquí usando esta expresión regular:
\{\{#a}}.*?\{\{\/a}}/g Esto coincide con {{#a}} seguido de 0 o de cualquier carácter seguido de {{/a}} .
o de lo contrario, puede usar esta coincidencia de expresiones regulares más estricta:
\{\{#a}}\[[^\]]*]\([^)]*\)\{\{\/a}}Aquí:
\[[^\]]*] : Coincide con [...] subcadena\([^)]*\) : Coincide con (...) subcadena var string = "By signing in, I agree to the {{#a}}[Terms of Use](https://www.example.com/termsofuse){{/a}} and {{#a}}[Privacy Policy](https://www.example.com/privacy){{/a}}."; console.log( string.match(/\{\{#a}}.*?\{\{\/a}}/g) );