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

时间:2013-08-29 01:57:20

标签: javascript substring wildcard bookmarklet indexof

我正在尝试构建一个预先形成服务客户端的bookmarklet,但我并不是真正熟悉Javascript。在我的下面的代码中,我想获取当前页面的网址,并首先验证它是域名之后的特定格式的网址,这是...

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

之后,第3个“/”应始终是我需要提取到var中的数字字符串。此外,我不能只从最后开始并向后工作,因为有时候在数字字符串之后还有其他“/”后面跟着我不需要的其他东西。

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

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

  3. 感谢您的帮助!

    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
    }
    
    })();
    

2 个答案:

答案 0 :(得分:0)

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。)

答案 1 :(得分:0)

要测试模式的字符串并获取其部分,可以使用regular expressions。您的标准的排期将是这样的:

/^\/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;
};

您可以找到更详细的示例here

所以,答案是:

  

indexOf()是验证url是否具体的正确函数   格式以及如何编写该表达式?我试了好几个   与indexOf()和Regex()相关的事情,但没有成功。我好像   总是以一个意想不到的角色结束,或者它只是不起作用。

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

  

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

正则表达式和match函数将允许测试所需格式的字符串并同时获取它的部分。