1

我在 javascript "/people/things/" 中有这个 url 我想要一个只返回 "things" 的函数我该怎么做?

我试过丑陋的东西。就像迭代一样,但是当我必须弄清楚如何删除字符串的其余部分并且渐近地非常缓慢时,我会陷入困境。

我不断得到“非法”。超级烦。

$(function() { 

    var parse = function(str) {

        var a = "";   
        if (str.length && str.length > 1) {

           str = str.slice(0, str.length -1);   //remove first

            for (var i = str.length; i > 1; i--) {
                if (str[i] !== '\\' ) {
                      a += str[i];
                    }

            }


        }

        return a;

    };   

       c = "\things\stuff\";
       alert(parse(c));        //result should be "things"                

});​
4

1 回答 1

1

首先,您可以使用以下代码来简化代码match()

var s = "/people/things/";
var match = s.match(/\/([^/]+)\/$/);
var things = match[1]; // "things"

关于ILLEGAL错误,那是因为您忘记在字符串中转义\。因此,请\things\stuff\使用\\things\\stuff\\.

现在,到你的parse功能。一般的想法是正确的,但是您有几个实现错误:

  1. break一旦你找到\\(你的else部分if)就退出循环;否则,您将跳过\,添加所有其他字符;
  2. 您正在从头开始遍历数组,并将每个字符添加到字符串中;因此,最后,你会得到一个反转的字符串。要修复它,而不是使用a += str[i],使用a = str[i] + a
  3. i应该以 开头a.length - 1,而不是a.length

这是最终版本:

var parse = function(str) {
  var a = '';   
  if (str.length && str.length > 1) {
    str = str.slice(0, str.length -1);
    for (var i = str.length - 1; i > 1; i--) {
      if (str[i] !== '\\' ) {
        a = str[i] + a;
      } else {
        break;   
      }
    }
  }
  return a;
};

演示

于 2012-09-06T21:56:06.557 回答