JS Regex:解析带条件的网址

JS Regex: Parse urls with conditions

我需要解析一组 url 并在特殊条件下从 url 中提取特定元素。为了进一步解释,考虑一组 urls:

http://www.example.com/appName1/some/extra/parts/keyword/rest/of/the/url http://www.somewebsite.com/appName2/some/extra/parts/keyword/rest/of/the/url http://www.someothersite.com/appname3/rest/of/the/url

如您所见,有两组 url,一组包含单词 "keyword",另一组没有。在我的代码中,我会收到域名之后url的部分(例如:/appName1/some/extra/parts/keyword/rest/of/the/url).

我有两个任务,一是检查 "keyword" 是否出现在 url 中,二是只有当 "keyword" 不在 [=49= 中时才执行=],解析 url 以获取两个组作为 appName 和 url 的其余部分(例如:grp 1.appName3 和 grp 2.rest/of/the/url for url 3,因为里面没有 "keyword")。整个事情应该在一个正则表达式中完成。

我的进步:

我看了很多Whosebug的条目和教程,但达不到实际要求。请帮我解决这个问题。

是的,这实际上是可能的。据我了解,您有以下情况:

  • /appName/some/extra/parts/keyword/rest/of/the/url
  • /appName/rest/of/the/url

您希望您的正则表达式完全不匹配第一个,而在第二种情况下,您希望在一组中使用 "appName" 而在另一组中使用 "rest/of/the/url"。以下正则表达式将执行此操作:

^(?!.*\/keyword\/)\/(.*?)\/(.*)$

解释:

  • ^ 断言字符串开头的位置`
  • (?!.*\/keyword\/)是一个否定的lookahead,向前看是为了确保字符串不包含/keyword/。这就是魔法发生的地方
  • \/匹配“/”,即域名后面的斜杠
  • (.*?)\/ 贪婪地捕获第一组(在您的示例中为 appname)直到下一个斜杠
  • (.*)$是捕获"rest/of/the/url"
  • 的组