J'essaie de faire correspondre une chaîne comme "https://open.spotify.com/track /1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ omg c'est sympa" et extrayez la partie après la dernière barre oblique, dans ce cas "1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ". Quelqu'un pourrait-il m'aider à comprendre le regex avec le groupe approprié pour cela? J'ai déjà essayé ce qui suit :

/.*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/

Mais il finit normalement par correspondre à l'ensemble du lien comme "https://open.spotify.com /track/1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ"

1
Marc Sloth Eastman 16 mars 2019 à 04:15

2 réponses

Meilleure réponse

Peut-être quelque chose comme:

\/track\/([^ ]*)

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

  1. rechercher le littéral /track/
  2. [^ ]* correspond à tout jusqu'à l'espace

Comme tu as tagué js :

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

Production

"1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ"

4
Xatenev 16 mars 2019 à 01:18

L'utilisation de \w vous aidera beaucoup ici. Il correspond à n'importe quelle lettre, chiffre ou trait de soulignement. Équivalent à [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 "
0
chingc 16 mars 2019 à 02:29