书签 - 验证 URL 格式并提取子字符串

Bookmarklet - Verify URL format and extract substring

本文关键字:提取 字符串 格式 验证 URL 书签      更新时间:2023-09-26

我正在尝试构建一个书签来构建服务客户端,但我对Javascript并不流利。在下面的代码中,我想获取当前页面的网址,并首先验证它是域之后遵循特定格式的网址,即......

/photos/[any alphanumeric string]/[any numeric string]

之后的第三个"/"应该始终是我需要提取到 var 中的数字字符串。此外,我不能只是从最后开始并向后工作,因为有时在数字字符串之后会有一个"/",然后是我不需要的其他东西。

  1. indexOf(( 是验证 url 是否为特定格式的正确函数,我将如何编写该表达式?我已经尝试了几件与 indexOf(( 和 Regex(( 相关的事情,但没有成功。我似乎总是以一个意想不到的角色结束,或者它只是不起作用。

  2. 当然,我问题的第二部分是,一旦我知道 url 是正确的格式,如何将数字字符串提取到变量中?

感谢您的任何帮助!

javascript:(function(){
// Retrieve the url of the current page
var photoUrl = window.location.pathname;
if(photoUrl.indexOf(/photos/[any alphanumeric string]/[any numeric string]) == true) {
    // Extract the numeric substring into a var and do something with it
} else {
    // Do something else
}
})();
var id = window.location.pathname.match(/'/photos'/('w+)'/('d+)/i); 
if (id) alert(id[1]); // use 1 or 2 depending on what you want 
else alert('url did not fit expected format');

(编辑:将第一个'd*更改为'w+,将第二个'd*更改为'd+dig更改为id

要测试字符串的模式并获取其部分,可以使用正则表达式。对你的标准的解释是这样的:

/^'/photos'/'w+'/('d+)'/?$/

它将匹配以 /photos/开头的任何字符串,后跟任何字母数字字符(和下划线(,后跟任何数字和字符串末尾的可选 /,包装在捕获组中。

因此,如果我们这样做:

"/photos/abc123/123".match(/^'/photos'/'w+'/('d+)'/?$/)

结果将是 ["/photos/abc123/123", "123"]。您可能已经注意到,捕获组是第二个数组元素。

即用型功能:

var extractNumeric = function (string) {
    var exp = /^'/photos'/'w+'/('d+)'/?$/,
        out = string.match(exp);
    return out ? out[1] : false;
};

您可以在此处找到更详细的示例。

所以,答案是:

indexOf(( 是验证 url 是否是特定 格式,我将如何编写该表达式?我试过几个 与 indexOf(( 和 Regex(( 相关的东西,但没有成功。我似乎 总是以一个意想不到的角色结束,或者它只是不起作用。

indexOf 不是这项工作的最佳选择,您使用正则表达式是正确的,但缺乏这样做的经验。

当然,我问题的第二部分是一旦我知道网址是 正确的格式,如何将数字字符串提取到变量中?

正则表达式与匹配函数一起将允许测试字符串的所需格式并同时获取其部分。