Простое регулярное выражение: попытка сопоставить () строку URL приводит к нулю

#javascript #regex #match

#javascript #регулярное выражение #совпадение

Вопрос:

Я очень новичок в регулярных выражениях и могу с уверенностью сказать, что я разочаровывающе сбит с толку.

У меня есть стандартный сайт со следующей структурой URL:www.example.com/asx/symbol

Я пытаюсь использовать Javascript и регулярное выражение для сопоставления строки ‘symbol’.

Например, www.example.com/asx/tls будет соответствовать (и возвращать) ‘tls’ (но только если перед ним был ‘/asx /’).

Если URL изменился на www.example.com/asx/cba тогда будет возвращен ‘cba’.

 function () {
                    var qs = window.location.search || "";
                    var m = qs.match(/asx/([a-z0-9] )/i);
                    console.log(m);
                    return m ? m[1] : "";  

Консоль.возврат журнала всегда равен нулю, и я не могу понять, почему. Я занимался этим несколько часов, прочитал слишком много руководств и попробовал regex101…

В нем говорится: «/ Неэкранированный разделитель должен быть экранирован обратной косой чертой ()»

Но затем, когда я добавляю … / i, и это не соответствует строке subject.

Я надеюсь, что кто-нибудь сможет помочь новичку.

Спасибо!

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

1. window.location.search содержит часть URL после ? .

2. Я думаю, вы хотите сопоставить window.location.pathname

3. согласен с @Barmar . Само регулярное выражение кажется прекрасным

4. Это можно было бы решить с помощью самой простой отладки: console.log(qs); . О, смотрите, оно пустое. Ага.

Ответ №1:

Вы не можете использовать window.местоположение.выполните поиск, чтобы получить имя пути ( window.location.search: возвращает часть URL-адреса querystring). Вы просто заменяете window.местоположение.поиск по окну.Расположение.имя пути.

Ответ №2:

 const url = 'www.example.com/asx/symbol'
const match = url.match(/asx/[D]*/g).join('').split('/').slice(1).join('');
console.log(match)