我正在寻找一种方法来查找我正在为浏览器游戏TribalWars编写的脚本当前打开的页面。网址设置非常相似,对于那些知道自己正在做什么的人来说这应该很容易(我显然不会这样做)。
网址如下所示:
https://nlp2.tribalwars.nl/game.php?village=171817&screen=train
每个村庄(duuh)的村庄ID都不同,因此该片段应该是某种通配符,但是“火车”是最后是我感兴趣的。这意味着用户正在查看我希望我的脚本修改的页面。
现在我已经写了/找到了以下代码:
/^\u0026.+$/ //To find the &, but it doesn't work because there is stuff in front of the &
/^https:\/\/((nl|zz|en).*\.tribalwars\.(nl|net)\/(game.php).*)/
//This piece works correctly (stole it from another script), but this will trigger at every page.
简而言之:我需要一个正则表达式,可以找出用户是否正在查看来自正确域名的页面(如上图所示),并找出标签是否“训练”#39;是对的。
谢谢:)
答案 0 :(得分:2)
var str = 'https://nlp2.tribalwars.nl/game.php?village=171817&screen=train',
re = /(nl|zz|en).*\.tribalwars\.(nl|net)\/game\.php(\?|.*\&)screen\=train/;
if (re.test(str)) alert('String matches');
基本上它的作用是:
/game.php
?
是第一个参数,screen
,如果不是 + &
,则 screen=train
请注意,RegEx之前或之后的内容并不重要,因为我们只是在没有任何边界检查的情况下进行测试,例如^
或$
。
最后一部分详细说明:(\?|.*\&)screen\=train
- 管道|
表示OR
- 我们检查 以查找问号\?
,或者检查*任意数量的字符后跟&符号.*\&
。如果您的网址中的参数组织方式不同,这非常有用
如果您查看自己提供的网址,则会在game.php
之后看到其中包含一些参数。参数列表以第一个参数之前的?
开头,之后每个参数与&
的下一个参数分开。 ?village=171817&screen=train
。但是,这些参数的顺序无关紧要,因此screen
参数可能是第一个?screen=train&village=171817
,然后是问号,而不是&符号。因此,如果screen=train
是第一个,则它与game.php?
之间没有任何内容。如果它不是第一个,那么在.*
之前可以有任意数量的参数,后跟一个与号和它本身。
答案 1 :(得分:0)
使用regEx的另一个选择是,你可以使用DOM和A标签为你分割网址。
好的,更新了更多url解析。查询分割器从这里得到 - 。 https://css-tricks.com/snippets/jquery/get-query-params-object/
也让它做A标签只创建一次。
例如。
window.decodeUrl = function decodeUrl(url) {
var a = document.createElement('A');
function inner(url) {
a.href = url;
return {
protocol: a.protocol,
hostname: a.hostname,
pathname: a.pathname,
search: a.search,
params: a.search.replace(/(^\?)/,'').split("&").
map(function(n){return n = n.split("="),
this[n[0]] = n[1],this}.bind({}))[0]
}
};
window.decodeUrl = inner;
return inner(url);
}
var url = 'https://nlp2.tribalwars.nl/game.php?village=171817&screen=train';
var durl = decodeUrl(url);
console.log(durl);
console.log(
'Are we game & train : ' +
((durl.pathname === '/game.php') &&
(durl.params.screen === 'train'))
);

答案 2 :(得分:0)
你能不能用它?你需要正则表达式吗?
var url = "https://nlp2.tribalwars.nl/game.php?village=171817&screen=train";
var urlSplit = url.split("/");
var urlSplitLast = urlSplit[urlSplit.length - 1];
var urlGet = urlSplitLast.split("&");
var urlScreen = urlGet[urlGet.length - 1];
var screen = urlScreen.split("=");
var screenValue = screen[screen.length - 1];
alert(screenValue);
答案 3 :(得分:0)
请查看这个,我只是继续你已经有正则表达式:
var re = /^https:\/\/((nl|zz|en).*\.tribalwars\.(nl|net)\/(game.php)?.*village=(\w+)&screen=(\w+))/g;
var url = "https://nlp2.tribalwars.nl/game.php?village=171817&screen=train";
var match = re.exec(url);
var village = match[5];
var screen = match[6];
console.log("village: " + village, "screen: " + screen);