我正在尝试构建一个预先形成服务客户端的bookmarklet,但我并不是真正熟悉Javascript。在我的下面的代码中,我想获取当前页面的网址,并首先验证它是域名之后的特定格式的网址,这是...
/photos/[any alphanumeric string]/[any numeric string]
之后,第3个“/”应始终是我需要提取到var中的数字字符串。此外,我不能只从最后开始并向后工作,因为有时候在数字字符串之后还有其他“/”后面跟着我不需要的其他东西。
indexOf()是否正确验证url是否为特定格式以及如何编写该表达式?我尝试了几个与indexOf()和Regex()相关的东西,但没有成功。我似乎总是以一个意想不到的角色结束,或者它只是不起作用。
当然,问题的第二部分是我知道网址格式正确,如何将数字字符串提取到变量中?
感谢您的帮助!
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
}
})();
答案 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函数将允许测试所需格式的字符串并同时获取它的部分。