Javascript JS正则表达式:使用条件解析URL

Javascript JS正则表达式:使用条件解析URL,javascript,regex,regex-negation,regex-lookarounds,Javascript,Regex,Regex Negation,Regex Lookarounds,我需要解析一组URL,并在特殊条件下从URL中提取特定元素。为了进一步解释它,考虑一组URL: 如您所见,有两组URL,一组包含单词“关键字”,另一组则没有。在我的代码中,我将收到域名后的url部分(例如:/appName1/some/extra/parts/keyword/rest/of/the/url) 我有两个任务,一个是检查url中是否存在“关键字”,第二个是仅当url中不存在“关键字”时才执行,解析url以获取两个组作为appName和url的其余部分(例如:grp 1.appNa

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

如您所见,有两组URL,一组包含单词“关键字”,另一组则没有。在我的代码中,我将收到域名后的url部分(例如:/appName1/some/extra/parts/keyword/rest/of/the/url)

我有两个任务,一个是检查url中是否存在“关键字”,第二个是仅当url中不存在“关键字”时才执行,解析url以获取两个组作为appName和url的其余部分(例如:grp 1.appName3和grp 2.rest/of/the/url,因为url 3中没有“关键字”)。整个过程应该在一个正则表达式中完成

我的进展:

  • 我能够将应用程序名和url的其余部分解析为组,但无法应用该条件

  • 我找到了一种选择没有“关键字”的毒刺的方法,我不确定这样做是否正确:
    ^((?!.\*关键字)。\*)$

  • 接下来,为了将以上两种方法结合起来,我尝试了一个经过长时间搜索后发现的语法
    (?(?=regex)then | else)
    。结果是: (?(?=^((?!.*keyword).*)$)\1) (?(?=^((?!.*关键字)。*)$)\1)但它表示组结构无效

我已经阅读了许多stackoverflow条目和教程,但没有达到实际要求。请帮我解决这个问题。

是的,这实际上是可能的。据我所知,你有以下情况:

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

^(?!.*\/keyword\/)\/(.*?)\/(.*)$
说明:

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

“我有两个任务”第二个任务是什么?根据第一个任务的结果对组件进行分组(过滤不带关键字的URL)。抱歉说不清楚,我已经编辑了我的问题。如果字符串中有“关键字”,请不要执行任何操作?是的,完全忽略它。不确定使用单个
RegExp
Hi@Mathias-S是否可以执行此操作,我尝试了此操作,但它似乎会返回组,即使其中有“关键字”。我不确定要求是否明确。如果url中存在“关键字”,则不应返回任何组。因此,如果存在关键字,则您希望获取整个url,如果不存在关键字,则希望获取组?或者,如果关键字存在,你什么都不想要吗?如果关键字存在,我什么都不想要,如果它不存在,组只需要使用一个消极的前瞻。我已经用一个正则表达式更新了我的答案。这能解决你的问题吗?