JavaScript会查看url标记是否与

时间:2016-11-22 11:18:11

标签: javascript regex

我正在寻找一种方法来查找我正在为浏览器游戏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;是对的。

谢谢:)

4 个答案:

答案 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');

基本上它的作用是:

  • 检查前缀,nl,zz或en(如您提供的)
  • 后跟任何
  • 后面是域名tribalwars
  • 后跟其TLD(nl或net)
  • 后跟您感兴趣的页面/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);