我可以用正则表达式将标点符号与特殊单词分开吗



我有以下字符串:

"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}}."

我使用下面的正则表达式来拆分单词,同时将{{#a}}[Terms of Use](https://www.example.com/termsofuse){{/a}}{{#a}}[Privacy Policy](https://www.example.com/privacy){{/a}}视为完整单词。

s+(?![^[]*])

我的问题是,我当前的正则表达式没有删除{{#a}}[Privacy Policy](https://www.example.com/privacy){{/a}}.末尾的句号。理想情况下,我希望我的正则表达式拆分句号、感叹号和问号。话虽如此,我不知道如何区分单词末尾的句号和URL中的句号。

您可以尝试以下正则表达式的变体:

s+(?![^[]*])|(?=[.?!](?![a-zA-Z0-9_%-]))

新的部分是结尾处(?=[.?!](?![a-zA-Z0-9_%-]))的交替。它对句点、问号或bang执行正向前瞻,使用反向前瞻来确保后面没有类似URL的字符。您可能需要调整括号中的字符类,以包含您想作为URL一部分的字符。

您最好使用.match,而不是.split,使用以下正则表达式:

{{#a}}.*?{{/a}}/g

这与后面跟0的{{#a}}或后面跟{{/a}}的任何字符相匹配。

或者你可以使用这个更严格的正则表达式匹配:

{{#a}}[[^]]*]([^)]*){{/a}}

此处:

  • [[^]]*]:匹配[...]子字符串
  • ([^)]*):匹配(...)子字符串

RegEx演示

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) );

最新更新