为什么我的JS正则表达式比应有的匹配更多?

时间:2019-03-16 01:15:53

标签: javascript regex

我正在尝试匹配一个字符串,例如“ https://open.spotify.com/track/1c3v8Ww4q8Vah92JBxAzxi?si=oqw6SQtxTVqJuoe2C_XrzQ不错,” 并提取最后一个斜杠之后的部分,在本例中为“ 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 个答案:

答案 0 :(得分:4)

也许像这样:

\/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”

答案 1 :(得分:0)

使用\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 "