首页 > 解决方案 > Javascript 正则表达式 - 捕获前面有另一个字符串的字符串

问题描述

我正在尝试使用 Javascript 正则表达式从 URL 中提取一些变量值。URL 采用以下模式:

@companyname/dl-molecularType-componentName.

一个示例 URL 是:

@companyname/dl-atoms-link

我想使用一个正则表达式从 URL 中提取分子类型和组件名称,给我一个数组:

['atoms', 'link']

这是我使用出色的RegExr站点尝试过的方法:

正则表达式:

/(@company\/dl+-)+(?!\1)/g

我的想法是第一个捕获组将捕获@companyname/dl-,第二个将捕获不在第一组中的所有内容。然而 RegExr 似乎暗示这将返回与第一个捕获组相同的结果。任何人都可以帮忙吗?

谢谢

标签: javascriptregexregex-lookarounds

解决方案


您可以使用如下所示的东西(请注意,我们知道结构并且可以更好地微调正则表达式):

function extract_fields(url)
{
   var match = url.match(/@[^\/]+\/dl-([^-]+)-(\w+)/);
   if ( match ) {
    return {molecularType: match[1], componentName: match[2]};
   }
   return false;
}

console.log(extract_fields('@companyname/dl-molecularType-componentName'));
console.log(extract_fields('@companyname/dl-atoms-link'));


推荐阅读