JS Regex:解析条件为

时间:2016-09-24 16:54:43

标签: javascript regex regex-negation regex-lookarounds

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

  

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

正如您所看到的,有两组网址,其中一组有"关键字"在其中和其他人不相同。在我的代码中,我将在域名之后收到网址的一部分(例如:/ appName1 / some / extra / parts / keyword / rest / of / the url)

我有两个任务,一个检查单词"关键字"存在于网址中,其次,仅当"关键字"在url中不存在,解析url以获取appName和url 的其余部分(例如:grp 1. appName3和grp 2. rest / of / url for url 3,因为它没有& #39; t"关键字"在其中)。整个事情应该在一个正则表达式中完成。

我的进步:

  • 我能够将应用名称和其他网址分组,但无法应用该条件。

  • 我找到了一种方法来选择没有"关键字"在其中,我不确定它是否是正确的方法:^((?!.\*keyword).\*)$

  • 接下来,为了结合上面两个,我尝试了一个长搜索后发现的东西,它有语法(?(?=regex)then|else) Reference。结果是:
    (?(?=^((?!.*keyword).*)$)\1)
    但它表示无效的群组结构。

我经历了很多stackoverflow条目和教程,但无法达到实际要求。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

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

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

您希望您的正则表达式与第一个完全匹配,而在第二种情况下,您希望" appName"在一个组和"休息/ / / url"在另一个。以下正则表达式将会这样做:

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

说明:

  • ^在字符串`
  • 的开头断言位置
  • (?!.*\/keyword\/)是一个负向前瞻,并展望未来以确保该字符串不包含/ keyword /。这就是神奇发生的地方
  • \/匹配" /",即域名后面的斜杠
  • (.*?)\/贪婪地捕获第一组(示例中的appname)直到下一个斜杠
  • (.*)$是捕获"休息/ / / url"
  • 的群组