RegEx - 获取 URL 中最后一个斜杠后的所有字符

IT技术 javascript regex
2021-02-25 17:44:16

我正在使用一个 Google API,它以以下格式返回 ID,我已将其保存为字符串。如何在 javascript 中编写正则表达式以将字符串修剪为仅 URL 中最后一个斜杠之后的字符。

var id = 'http://www.google.com/m8/feeds/contacts/myemail%40gmail.com/base/nabb80191e23b7d9'
6个回答

不要写正则表达式!这与字符串函数无关:

var final = id.substr(id.lastIndexOf('/') + 1);

如果您知道最后一部分将始终是 16 个字符,那就更容易了:

var final = id.substr(-16);
虽然我正在寻找 PHP 解决方案,但我发现了这个主题。我转换了它,以防有人感兴趣:substr($id, strrpos($id, "/") + 1)
2021-04-21 17:44:16
@AllanKimmerJensen 好吧,当然,在最后一个斜线之后没有任何东西。
2021-04-23 17:44:16
不是问题的答案!
2021-05-01 17:44:16
不会返回任何内容是 url 是 'http://www.google.com/m8/feeds/contacts/myemail%40gmail.com/base/nabb80191e23b7d9/'
2021-05-09 17:44:16

一种稍微不同的正则表达式方法:

var afterSlashChars = id.match(/\/([^\/]+)\/?$/)[1];

分解这个正则表达式:

\/ match a slash
(  start of a captured group within the match
[^\/] match a non-slash character
+ match one of more of the non-slash characters
)  end of the captured group
\/? allow one optional / at the end of the string
$  match to the end of the string

所述[1]然后检索匹配内的第一捕获组

工作片段:

var id = 'http://www.google.com/m8/feeds/contacts/myemail%40gmail.com/base/nabb80191e23b7d9';

var afterSlashChars = id.match(/\/([^\/]+)\/?$/)[1];

// display result
document.write(afterSlashChars);

@Alan Moore 我不知道我为什么选择这个答案,可能是因为它目前适合我。谢谢你的解释。
2021-04-28 17:44:16
@AlanMoore - 我修改了答案并添加了一个工作片段。
2021-05-03 17:44:16
解释使您的答案比被接受的答案更有value。谢谢!
2021-05-08 17:44:16
@IliaRostovtsev - 我修改了答案并添加了一个工作片段。
2021-05-14 17:44:16
@IliaRostovtsev:不幸的是,解释是错误的,答案也是错误的。非贪婪量词不能保证尽可能短的匹配,因为它们只影响匹配的结束位置,而不影响匹配的开始位置。此正则表达式从第一个斜杠到结尾匹配
2021-05-15 17:44:16

以防万一其他人遇到此线程并正在寻找一个简单的 JS 解决方案:

id.split('/').pop(-1)

简单,简短,漂亮。但是 -1 参数似乎是多余的,因为 pop() 总是返回最后一个元素。
2021-04-23 17:44:16
这是天才!又优雅
2021-04-27 17:44:16
2021-04-29 17:44:16

这很容易理解 (?!.*/).+

让我解释:

首先,让我们匹配末尾有斜杠的所有内容,好吗? 那是我们不想要的部分

.*/ 匹配所有内容直到最后一个斜线

然后,我们做一个“负前瞻”(?!)说“我不想要这个,丢弃它”

(?!.*) 这是“负前瞻”

现在,我们可以愉快地采取一切是旁边什么我们不希望这个 .+

你可能需要逃避 / 所以它变成:

(?!.*\/).+

这个正则表达式:[^\/]+$- 像冠军一样工作:

var id = ".../base/nabb80191e23b7d9"

result = id.match(/[^\/]+$/)[0];

// results -> "nabb80191e23b7d9"