在Javascript中的indexOf无法正常工作

时间:2014-08-13 11:04:36

标签: javascript angularjs

如果这些可能的字符串我想要获取页码:

$scope.projects.next可以等于......

  • string 1)/ api / project /?currentuser = false& page = 2
  • string 2) / API /项目/?页= 2

我试过这个:

$scope.projects.next.split('=')[1].indexOf("page")

但是,这仅适用于字符串2.如何更改此项以确保它找到页码,无论可以添加哪个位置或将来的参数?

我也尝试过:

$scope.projects.next.indexOf("page")

但是这让52不明白为什么。

5 个答案:

答案 0 :(得分:5)

您可以使用正则表达式:

/page=([0-9]+)/.exec($scope.projects.next)[1]

使用带有捕获组的正则表达式(()中的位)作为页码,并在page=之后捕获一个或多个数字。结果是一个数组,其中第一个元素是整个匹配,第二个元素是捕获组(这就是我们最后有[1]的原因)。

答案 1 :(得分:3)

请参见此处:http://jsbin.com/gizalo/1/edit

从字符串

获取参数的函数
function getParameterByName(name, string) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(string);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

<强>控制器

app.controller('firstCtrl', function($scope){

 var stringa="/api/project/?currentuser=false&page=2";
 var stringb="/api/project/?page=2";

 $scope.a = getParameterByName('page', stringa);
 $scope.b = getParameterByName('page', stringb);
});

答案 2 :(得分:1)

问题是,在第一个网址中有两个=符号,因此您的索引在第一个网址上将被输出1

$ scope.projects.next.split(&#39;页=&#39;)[1]

答案 3 :(得分:0)

这与AngularJS完全无关。但它也很简单,所以为什么不回答呢。拆分字符会分裂该字符的每个实例。您的最上面的字符串最终会变为['/api/project/?currentuser', 'false&page', '2'],因此获取[1]('page')的位置并不有用。将其拆分为?

答案 4 :(得分:0)

var start = $scope.projects.next.indexOf("page=");
var end   = $scope.projects.next.indexOf("&");

var page;

if(end == -1) {
    page = $scope.projects.next.substring(start+5);
} else {
    page = $scope.projects.next.substring(start+5, end);
}

这也适用于?page = 17&amp; test = 2