Почему мое регулярное выражение JS соответствует больше, чем должно? - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь сопоставить строку типа "https://open.spotify.com/track/1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ omg ​​this nice" и извлечь часть после последней косой черты, в этом случае «1c3v8Ww4q8Vah92JBxAzxi? si = oqw6SQtxTVqJuoe2C_XrzQ». Может ли кто-нибудь помочь мне выяснить регулярное выражение с соответствующей группой для этого? Я уже пробовал следующее:

/.*spotify\.com.*/
/.*spotify\.com.\/track\/.*/
/.*spotify\.com.\/track.*/
/.*spotify\.com\.\/track.*/
/.*spotify\.com\.\/track\/.*/
/.*spotify\.com\..*/
/.*spotify\.com\/.*/
/.*spotify\.com\/track\/.*/
/.*spotify\.com\/track\/(.*)/
/.*spotify\.com\/track\/(.*)\s*/
/.*spotify\.com\/track\/(.*)\s*$/
/.*spotify\.com\/track\/(\S)*/
/.*?spotify\.com\/track\/(\S)*/
/\/(.*)?\s/

но обычно это соответствует всей ссылке, например "https://open.spotify.com/track/1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ"

Ответы [ 2 ]

4 голосов
/ 16 марта 2019

Может быть что-то вроде:

\/track\/([^ ]*)

https://regex101.com/r/PwRXlA/1

  1. поиск литерала /track/
  2. [^ ]* совпадениевсе до пробела

, как вы пометили js:

'https://open.spotify.com/track/1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ omg this ones nice'.match(/\/track\/([^ ]*)/)[1]

Вывод

"1c3v8Ww4q8Vah92JBxAzxi? si = oqw6SQtxTVqJuoe2C_XrzQ * * 10 * 10 * 10 * 10 * 10 * 10 * 10

0 голосов
/ 16 марта 2019

Использование \w поможет вам здесь.Это соответствует любой букве, цифре или подчеркиванию.Эквивалентно [a-zA-Z0-9 _].

track = "https://open.spotify.com/track/1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ omg this ones nice";
re = /track\/(\w+\?\w+=\w+)\s/;

match = track.match(re);
match[1];  # 1st parenthesized group: "1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ"
match[0];  # the entire match: "track/1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...