以角度获取URL中所有辅助路由的名称

时间:2018-10-31 19:38:08

标签: regex angular angular-router

网址如下

  

http://localhost:4100/example/5b8c94cfc5f85728db8bddf2/5b8c94d0c5f85728db8bddf3/(p1:.....//p2:....//p3 ....),

在这种情况下,我需要从任何组件中获取p1,p2,p3。

我试图将正则表达式放在一起,但是在js控制台中它使我失败,但是在https://regexr.com/中它可以正常工作。

我得到了路由器类的网址

let url = this.router.url;
let partial = this.router.url.split ('(') [1]

let regex = /(\w)*:/g
let outlets = regex.exec(partial)
console.log(outlets) // you do not get all the matches

我需要从任何组件中获取所有辅助插座的名称,我以这种方式认为,我在正则表达式中遇到了问题。

如果有另一种方式获得我想要的东西,那将非常有用。

1 个答案:

答案 0 :(得分:1)

我建议在(字符后面加上/(?<=\().+/使用正向后缀:

这可以在以下方法中看到:

const url = "http://localhost:4100/example/5b8c94cfc5f85728db8bddf2/5b8c94d0c5f85728db8bddf3/(p1:.....//p2:....//p3";
const regex = /(?<=\().+/;

console.log(url.match(regex)[0]);

或者,如果要分别捕获所有三个组,可以使用
/(?<=\()(.+(?=\/\/))\/\/(.+(?=\/\/))\/\/(.+)/

const url = "http://localhost:4100/example/5b8c94cfc5f85728db8bddf2/5b8c94d0c5f85728db8bddf3/(p1:.....//p2:....//p3";
const regex = /(?<=\()(.+(?=\/\/))\/\/(.+(?=\/\/))\/\/(.+)/;

console.log(url.match(regex));

这看起来很复杂,但是本质上是做同样的事情,只需在//上添加前瞻,并重复该条件三次即可。