Как получить slug из URL-адреса JavaScript

#javascript #regex #next.js

Вопрос:

У меня есть URL-адреса, например.

И я хочу, чтобы это были строки.

 'about'
'product'
'learn'
 

Я пытался. Я использую Next.js кстати.

 import { useRouter } from 'next/router'

const { asPath } = useRouter()

const result = asPath.substring(1).split('?')[0].split('#')[0].split('/')[0]
 

Но есть ли лучший способ справиться с этим, например, с помощью RegEx или другими методами?

А также с нетерпением жду, когда мне понравится.

 'about' or ['about']
'product/roller' or ['product','roller']
'learn/goin' or ['learn','goin']
 

Возможно?

Комментарии:

1. Как насчет использования ^http[s]?://.*?/([^?/]*) регулярного выражения, онлайн-демонстрация для этого регулярного выражения.

Ответ №1:

Создайте URL объект, получите pathname и извлеките не косые черты

 let slug = url => new URL(url).pathname.match(/[^/] /g)

console.log(slug('https://example.com/about?hl=en#iron'))
console.log(slug('https://example.com/product/roller/?hl=enamp;lo=true'))
console.log(slug('https://example.com/learn/goin/?hl=enamp;lo=true#iron')) 

Нерегулярным способом было бы .pathname.split('/').filter(Boolean)

Ответ №2: