上一个答案
你肯定在寻找这个正则表达式:
https://www.test.com/(text/)*word/\d+(/text)*
这是在 JavaScript 上下文中使用它的方法(非常斜线 / 被反斜线 \/ 转义):
var str = 'https://www.test.com/text/1@@@https://www.test.com/text/word/2@@@https://www.test.com/text/text/word/3@@@https://www.test.com/3/text@@@https://www.test.com/word/3/text/text';
var urls = str.match(/https:\/\/www.test.com\/(text\/)*word\/\d+(\/text)*/g);
console.log(urls);
在数组中你得到你想要的元素。
更新问题并添加作者评论后更新答案
如果您需要从示例字符串中获取words,那么您必须使用更复杂的常规异常:
var str = 'https://www.test.com/text/1@@@https://www.test.com/text/word/2@@@https://www.test.com/text/text/word/3@@@https://www.test.com/3/text@@@https://www.test.com/word/3/text/text';
var urls = str.match(/(?<=\/)\w+(?=\/\d+\/\w)|(?<=(\w\/\w+\/))\w+(?=\/\d)/g);
console.log(urls);
说明
这是正则表达式/(?<=(\w\/\w+\/))\w+(?=\/\d)|(?<=\/)\w+(?=\/\d+\/\w)/g,受/.../ 限制,并带有g 标志强制模式搜索出现。
正则表达式有两种选择...|...
第一个 (?<=\/)\w+(?=\/\d+\/\w) 捕获搜索词直接位于斜杠 (?<=\/) 后面并且在数字 (?=\/\d+\/\w) 后面的更多词之前的情况。
https://www.test.com/word/3/text/text
第二种选择(?<=(\w\/\w+\/))\w+(?=\/\d) 捕获的情况是,该词前面是域(?<=(\w\/\w+\/)) 之后的其他词(实际上是由字母数字字符分隔的两个斜线),并且搜索的词紧跟在斜线之前,后跟数字@987654347 @。
https://www.test.com/text/word/2
https://www.test.com/text/text/word/3
所有斜线必须转义:\/。
(?<=...) 在正则表达式中表示 lookbehind,(?=...) 在正则表达式中表示 lookahead。
注意 1. 上面的例子目前只在 Chrome 浏览器中运行良好,如that:
(...) 现在lookbehind 是 ECMAScript 2018 规范的一部分。在撰写本文时(2018 年末),谷歌的 Chrome 浏览器是唯一一个支持后视的流行 JavaScript 实现。所以如果跨浏览器的兼容性很重要,你就不能在 JavaScript 中使用lookbehind。
注 2.Lookbehnd,即使它被正确解释,在大多数正则表达式引擎中必须包含一个 固定长度 正则表达式,我不保留上面的例子,因为这个仍然有效并且适用于谷歌浏览器的JavaScript engine、JGsoft engine和.NET framework RegEx classes中使用的正则表达式引擎。
注 3。lookbehind 语法或其较差的 \K 替换被大量编程语言中使用的许多正则表达式引擎广泛支持。
更多关于我使用的正则表达式的解释你可以找到例如here。