URL.match(/(?<=(auto|news)-|[?&]mdl=)\d+/g)?.map(v => +v)
如果有 Get 参数 mdl,我们会提取连字符后面的数字和数字。我们立即将值转换为数字......
如何使另一个值出现在数组的输出中。字符串,拉出连字符之前的内容。也就是说,无论是汽车还是新闻......
示例字符串
https://example.com/auto-123?mdl=789
https://example.com/news-123
https://example.com/auto-123?asd=22&mdl=789
https://example.com/mmm-123
如果该行既不包含“auto”也不包含“news”。必须返回NULL。数组中的第一个值必须始终是“auto”或“news”,第二个是“123”,第三个可能不是这个 mdl 值
为了同时获取连字符之后的数值和其之前的字符串(
auto
或news
),最好使用多个括号组而不是回溯来提取这两个值。考虑到出现的解析行的示例,它立即变得更加容易。我们按顺序走吧。首先,适应一个已经不是最容易理解的常规系统是没有意义的。此外,我们需要更多数据,因此我们将编写自己的数据。并且马上...
如果你仔细观察,一切都非常清楚:“括号组”,“或”和“数字”(来自一个或多个),这要归功于
.match()
值数组将以数组的形式返回给我们 -['auto-123', 'mdl=789']
。我们所要做的就是提取必要的参数及其值。我不知道你最喜欢它们的最终形式,但我假设是一个物体的形式。但是,为了便于理解,我将首先以 results 的形式呈现结果
match()
,然后为了清晰起见,我们将对其进行遍历.map()
,最后您可能需要.reduce()
以对象的形式显示结果。我认为结果非常清楚。实际上,我们剩下的就是使用以下方法将它们转换为数组或对象
.split()
正如您所看到的,我们现在有一个 ['key','value'] 形式的数组,剩下的就是以一种或另一种形式返回结果。有足够的方法,但由于我们已经使用了它
.map()
,我们将返回一个对象数组。好吧,因为很可能你不需要一个对象数组(尽管当对象太多并且你需要在那里找到一些东西时它也有其优点),而是一个对象,那么
.map()
我们将使用.reduce()
其实你需要的就是这个
PS,您可能已经注意到,我从数组中删除了一个明显“无效”的字符串...这只是为了不用“约定”乱扔示例,但在您的情况下,一切都已经由
?.
-提供URL?.match()
。PPS 用于掌握常规培训和这方面的其他培训,控制台并不总是方便,但有tyts或tyts在线服务可供选择。