我有以下字符串:
"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) );