JavaScript中的indexOf无法正常工作

indexOf in Javascript not working how it should

本文关键字:工作 常工作 中的 indexOf JavaScript      更新时间:2023-09-26

如果这些可能的字符串,我想把页码拿出来:

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

  • 字符串 1(/api/project/?currentuser=false&page=2
  • 字符串 2(/api/project/?page=2

我试过这个:

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

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

我也尝试过:

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

但这52不知道为什么。

您可以使用正则表达式:

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

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

请看这里: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);
});

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

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

这与 AngularJS 完全无关。但它也很简单,所以为什么不回答。对字符进行拆分会在该字符的每个实例上拆分。你的顶字符串最终会['/api/project/?currentuser', 'false&page', '2'],所以获得[1]('page')的位置是没有用的。改为将其拆分为?

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&test=2