0

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

/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
}

})();
4

2 回答 2

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+和。)digid

于 2013-08-29T02:13:58.850 回答
0

要测试字符串的模式并获取它们的部分,您可以使用正则表达式。您的标准的表达方式如下:

/^\/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 不是这项工作的最佳选择,您使用正则表达式是对的,但缺乏这样做的经验。

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

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

于 2013-08-29T02:28:41.003 回答