Получить сегмент строки без указания суффикса c с JS регулярным выражением - PullRequest
0 голосов
/ 04 августа 2020

У меня есть URL-адрес, он может быть

https://arxiv.org/abs/2004.10934

или с суффиксом v [0-9]

https://arxiv.org/abs/2004.10934v3

Я хочу отфильтровать v [0- 9] часть с регулярным выражением.

То есть получение 'https://arxiv.org/abs/2004.10934', независимо от того, какой тип URL нам предоставлен.

Ниже показано, что у меня есть на данный момент, это работает, но кажется хакерским ...

let url = 'https://arxiv.org/abs/2004.10934v3'
let regURL = /(.*(?<!v[0-9])(?<!v))/g;
let url_f = regURL.exec(url)[0];

Есть ли для этого лучший шаблон регулярного выражения?

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Используйте

/^(.*?)(v\d+)?$/

См. proof .

ПОЯСНЕНИЕ

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    .*?                      any character except \n (0 or more times
                             (matching the least amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  (                        group and capture to \2 (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    v                        'v'
--------------------------------------------------------------------------------
    \d+                      digits (0-9) (1 or more times (matching
                             the most amount possible))
--------------------------------------------------------------------------------
  )?                       end of \2 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \2)
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

JavaScript:

let url = 'https://arxiv.org/abs/2004.10934v3'
let regURL = /^(.*?)(v\d+)?$/;
let [_, url_f, version] = regURL.exec(url);
console.log(url_f);
0 голосов
/ 04 августа 2020

Если вы замените v [0-9] пустой строкой, она будет отфильтрована:

url.replace(/v[0-9]$/, '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...